我正在尝试在搜索和使用中使用ST2的正则表达式功能替换,但无法弄清楚如何制作非捕获组。对于这个例子,我想找到“DEAN”的实例,其中不是后跟“UMBER”,即区分“DEANCARE”和“DEANUMBER”
根据我过去阅读和使用的内容,非捕获的语法应为:
DEAN(?:UMBER)
哪个应与“DEANCARE”匹配,但不“DEANUMBER”。相反,Sublime Text only 发现“DEANUMBER”就好像我输入了一样:
DEAN(UMBER)
在第一个(或每个)不需要的字母上使用方括号工作:
DEAN[^U]
但是我仍然倾向于使用组不匹配而不是其他目的,并且避免必须明确地不匹配每个单独的字符。我是否有语法错误,或者ST2正则表达式的工作原理可能存在概念错误?
答案 0 :(得分:8)
非捕获组与组相同,只是它不会在反向引用中捕获正则表达式的匹配部分。
如果您要在字符串DEAN(?:UMBER)
上使用正则表达式DEANUMBER
,那么您将匹配,但引用\1
in,例如搜索和替换不会给你任何东西,因为该组是非捕获的。
另一方面,您可以使用DEAN(UMBER)
进行搜索并替换made of L\1
,这将产生made of LUMBER
,因为第一个(捕获)组的匹配正被反向引用\1
。这当然是一个非常毫无意义的例子,如果你想了解更多关于群组和反向引用的建议,我建议你阅读this或其他一些文件/关于这个问题的文章。
根据评论中的建议,您想要的是negative lookahead。