vim的正则表达式解释

时间:2009-06-29 13:19:11

标签: regex vim

如果我想要所有带有'ruby'文本而不是'myruby'的行,那么这就是我要做的。

:g/\<ruby\>/

我的问题是这里的小于和大于符号的含义是什么?我使用的唯一正则表达式是在ruby中进行编程。

同样,如果我想找到三个连续的空行,那么这就是我要做的事情

/^\n\{3}

我的问题是为什么我逃脱第一个大括号(打开大括号)但没有逃脱第二个大括号(闭合大括号)?

3 个答案:

答案 0 :(得分:16)

Vim在正则表达式中反斜杠转义的规则并不一致。你必须逃避\{...}的左大括号,但是[...]根本不需要转义,捕获组是\(...\)(逃避打开和关闭paren)。还有其他不一致之处。

值得庆幸的是,Vim允许您通过magic设置更改此行为,即使是在正则表达式的基础上。如果将\v放在正则表达式的开头,则转义规则会变得更加一致;除了数字,字母和下划线之外,所有内容都是“神奇的”,因此除非要插入除此之外的文字字符,否则不需要反斜杠。

然后您的第一个示例变为:g/\v<ruby>/,您的第二个示例变为/\v^\n{3}。有关详细信息,请参阅:h /magic:h /\v

答案 1 :(得分:13)

\<\>表示单词边界。在Perl中,grep和less(名称为3 OTOH)为此使用\b,所以我想在Ruby中也是如此。

关于你的第二个问题,整个表达式{3}需要转义。你并没有逃避每个花括号,而是将整个事物放在一起。

有关详情,请参阅this question

答案 2 :(得分:0)

对于你的第一个正则表达式,你也可以这样做:

:g/[^\ ]ruby\ /

这将确保您的ruby关键字前后有空格。