Vim搜索替换正则表达式

11

我想替换所有出现的hello(...)hello[...]

我尝试了一些类似于%s/hello\((.*?)\)/hello\[$1\]/的东西,但都没有成功。

请帮忙吗?

1个回答

16

那是Perl语法,不是Vim. 在Vim的正则表达式中,默认情况下,括号匹配自身,反斜杠括号捕获 - 与Perl相反。而且,Vim不理解非贪婪修饰符?,捕获组使用\n进行插值,而不是$n。尝试这个:

%s/hello(\([^)]*\))/hello[\1]/

或者,你可以使用\v(“非常魔法”)修饰符,使其对特殊字符和反斜杠的行为更像Perl,尽管它不会使Vim理解*?或更改其插值语法:

%s/\vhello\(([^)]*)\)/hello[\1]/

另外,请注意在替换文本中方括号不需要反斜杠 - 替换命令的右侧不是正则表达式,所以你不必担心大多数在正则表达式中特殊的字符。基本上只有反斜杠本身是特殊的,可以用于包括捕获组或自身或分隔符的文字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接