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