【问题标题】:vim search replace regexvim 搜索替换正则表达式
【发布时间】:2012-05-02 05:31:29
【问题描述】:

我正在尝试将所有出现的hello(...) 替换为hello[...]

我尝试了%s/hello\((.*?)\)/hello\[$1\]/ 之类的方法,但没有成功

有什么帮助吗?

【问题讨论】:

    标签: regex vim replace


    【解决方案1】:

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

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

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

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

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

    【讨论】: