使用正则表达式匹配vim中的括号时的奇怪行为

时间:2013-06-14 18:42:24

标签: regex vim

我在理解为什么正则表达式不起作用时遇到了一些麻烦。我正在搜索短语@Test(groups = {"broken"}),我无法用这个表达式找到它:

@Test\(groups = {"broken"}\)

然而,这个表达式产生结果:

@Test\(.*groups = {"broken"}\)

为什么会这样?我不明白为什么第一个表达式不起作用,但我明白为什么第二个表达式会起作用。

2 个答案:

答案 0 :(得分:9)

\(用于在vim中捕获,因为默认情况下它不使用扩展/“魔术”regexen。如果要搜索文字填充,请使用(

第二个表达式有效,因为.*匹配(

答案 1 :(得分:4)

如果要搜索文字文本,只需将\V添加到搜索模式中;那么,只有反斜杠具有特殊含义,必须进行转义:

/\V@Test(groups = {"broken"})

与大多数其他正则表达式方言相反,许多Vim原子需要以\作为前缀而不是文字。为了使Vim的模式看起来更像Perl,你可以添加\v;然后,(...)会捕获分组(如您所料),并且您需要转义\(以匹配文字括号。