vim搜索替换正则表达式

Jas*_*nce 11 regex vim replace

我想,以取代所有发生hello(...)hello[...]

我尝试过%s/hello\((.*?)\)/hello\[$1\]/没有任何成功的事情

有任何帮助吗?

Mar*_*eed 16

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

%s/hello(\([^)]*\))/hello[\1]/
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用\v("非常神奇")修饰符使特殊字符和反斜杠的行为更像Perl,但它不会使Vim理解*?或更改其插值语法:

%s/\vhello\(([^)]*)\)/hello[\1]/
Run Code Online (Sandbox Code Playgroud)

另外,请注意,替换文本中的方括号不需要反斜杠 - 替换命令的右侧不是正则表达式,因此您不必担心大多数特殊字符一.几乎只有反斜杠本身是特殊的,并且可以用于包括捕获组或其自身或分隔符的文字实例.