我在理解为什么正则表达式不起作用时遇到了一些麻烦。我正在搜索短语@Test(groups = {"broken"})
,但无法使用以下表达式找到它:
@Test\(groups = {"broken"}\)
但是,此表达式会产生结果:
@Test\(.*groups = {"broken"}\)
为什么会这样?我不明白为什么第一个表达式不起作用,但我理解为什么第二个表达式起作用。
\(
用于在 vim 中捕获,因为它默认不使用扩展/“魔术”正则表达式。如果要搜索文字括号,请使用(
.
第二个表达式有效,因为.*
matches (
。
如果您想搜索文字文本,只需\V
添加到搜索模式之前;那么,只有反斜杠有特殊含义,必须转义:
/\V@Test(groups = {"broken"})
与大多数其他正则表达式方言相比,许多 Vim 原子需要前缀\
为非字面量。为了让 Vim 的模式看起来更像 Perl 的,你可以在前面加上\v
; 然后,(...)
进行捕获分组(如您所料),您需要转义\(
以匹配文字括号。