Sublime Text 2 - 正则表达式搜索 - 非捕获组语法

时间:2013-05-13 14:34:42

标签: regex search replace sublimetext2

我正在尝试在搜索和使用中使用ST2的正则表达式功能替换,但无法弄清楚如何制作非捕获组。对于这个例子,我想找到“DEAN”的实例,其中不是后跟“UMBER”,即区分“DEANCARE”和“DEANUMBER”

根据我过去阅读和使用的内容,非捕获的语法应为:

DEAN(?:UMBER)

哪个应与“DEANCARE”匹配,但“DEANUMBER”。相反,Sublime Text only 发现“DEANUMBER”就好像我输入了一样:

DEAN(UMBER)

在第一个(或每个)不需要的字母上使用方括号工作:

DEAN[^U] 

但是我仍然倾向于使用组不匹配而不是其他目的,并且避免必须明确地不匹配每个单独的字符。我是否有语法错误,或者ST2正则表达式的工作原理可能存在概念错误?

1 个答案:

答案 0 :(得分:8)

非捕获组与组相同,只是它不会在反向引用中捕获正则表达式的匹配部分。

如果您要在字符串DEAN(?:UMBER)上使用正则表达式DEANUMBER,那么您将匹配,但引用\1 in,例如搜索和替换不会给你任何东西,因为该组是非捕获的。

另一方面,您可以使用DEAN(UMBER)进行搜索并替换made of L\1,这将产生made of LUMBER,因为第一个(捕获)组的匹配正被反向引用\1。这当然是一个非常毫无意义的例子,如果你想了解更多关于群组和反向引用的建议,我建议你阅读this或其他一些文件/关于这个问题的文章。

根据评论中的建议,您想要的是negative lookahead