【发布时间】:2016-09-23 11:59:09
【问题描述】:
鉴于以下示例,我将如何匹配单词“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 中进行查找替换。如果这是不可能的,我绝对愿意使用另一个文本/代码编辑器。
【问题讨论】:
-
这取决于您使用的工具/正则表达式库。
-
嗨@WiktorStribiżew,我想在Visual Studio Code 的查找替换中使用它。恐怕我不知道他们在后台使用哪个库
-
抱歉,这是不可能的,因为 VSC 使用 ECMAScript 5 正则表达式。
-
“CAST(.*)DateTime 选择每行第一次出现“CAST”和最后一次出现“DATETIME”之间的所有字符” - 这是因为正则表达式是“贪婪的。”所以你需要为 .* 部分切换到非贪婪模式。 (我不知道 regex Visual Studio 使用的是什么“风格”,所以你需要自己去看看那里是如何做到的。)
-
如果在数字周围选择连字符怎么办?意思是:regex101.com/r/dB2fB3/1
标签: regex