3

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

从我过去阅读和使用的内容来看,非捕获的语法应该是:

DEAN(?:UMBER)

哪个应该匹配“DEANCARE”而不是“DEANUMBER”。然而相反,Sublime Text找到“DEANUMBER”,就好像我输入了:

DEAN(UMBER)

在第一个(或每个)不需要的字母上使用方括号确实有效:

DEAN[^U] 

但我仍然更喜欢使用组不匹配而不是用于其他目的,并且避免必须明确不匹配每个单独的字符。我是否有语法错误,或者 ST2 的正则表达式如何工作的概念错误?

4

1 回答 1

8

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

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

DEAN(UMBER)另一方面,您可以使用它进行搜索和替换,因为made of L\1made of LUMBER一个(捕获)组的匹配被\1. 这当然是一个非常没有意义的例子,如果你想了解更多关于组和反向引用的信息,我建议你阅读这个或其他一些关于此事的文档/教程。

正如评论中所建议的,你想要的是一个否定的前瞻

于 2013-05-13T14:54:04.740 回答