鉴于以下示例,我如何匹配单词" 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中进行查找替换。如果无法做到这一点,我绝对愿意使用其他文本/代码编辑器。
答案 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
- 我们想要匹配的连字符