正则表达式匹配两个特定单词

时间:2016-09-23 11:59:09

标签: regex

鉴于以下示例,我如何匹配单词" CAST"之间的每个连字符。和" DATETIME"? (CAST(N'2013-11-26 10:52:47.957' AS DateTime)

每行多次出现模式。 字符串中的其他任何地方都可能有连字符,不能匹配。

INSERT [dbo].[tbl_Content] ([Template], [CreatedDate], [Url], [PublishedDate]) VALUES (N’gallery-item.aspx', CAST(N'2013-11-26 10:52:47.957' AS DateTime), N'some-url', CAST(N'2013-11-26 00:00:00.000' AS DateTime))
INSERT [dbo].[tbl_Content] ([Template], [CreatedDate], [Url], [PublishedDate]) VALUES (N’another-item.aspx', CAST(N'2013-11-26 10:52:47.957' AS DateTime), N'some-other-url', CAST(N'2013-11-26 00:00:00.000' AS DateTime))

CAST(.*)DateTime选择第一次出现的" CAST"之间的所有字符。并且最后一次出现" DATETIME"在每一行。

这个选择中可能还有其他连字符。

-将匹配文档中的任何连字符。

我想我需要以某种方式结合这两种模式,但我的正则表达式知识是不存在的。 CAST(-)DateTime无效。

这样做的正确方法是什么?

如果平台很重要:这将用于在Visual Studio Code中进行查找替换。如果无法做到这一点,我绝对愿意使用其他文本/代码编辑器。

1 个答案:

答案 0 :(得分:1)

如果你可以使用Notepad ++,你可以使用基于\G运算符的正则表达式,它有助于在初始匹配后找到连续匹配。

使用

(?:\bCAST\b|(?!^)\G)(?:(?!\b(?:DATETIME|CAST)\b)[^-])*\K-

并替换为您想要的任何符号(请记住,必须在NPP替换模式中转义括号)。下面,我将-替换为§

详细

  • (?:\bCAST\b|(?!^)\G) - 整个字CAST或上一场比赛的结束位置
  • (?:(?!\b(?:DATETIME|CAST)\b)[^-])* - 一个驯化的贪婪令牌,匹配除-之外的任何字符(请参阅[^-]),但不会启动整个字词序列DATETIME或{{1} (见负面预测CAST
  • (?!\b(?:DATETIME|CAST)\b) - 匹配重置操作符:到目前为止匹配的所有文本都被丢弃
  • \K - 我们想要匹配的连字符

enter image description here

相关问题