我正在寻找一个正则表达式,可以将类似于这样的内容进行更改:
print "testcode $testvar \n";
在
printnlog("testcode $testvar \n");
我尝试了 %s/print\s*(.\{-});/printnlog(\1);/g
但是gvim提示
print\s*(.\{-});
不匹配。
我的错误在哪里? 在'\s'后面使用'*'是否可以,因为后面的'{-};'会停止贪婪匹配吗?
提前致谢。
在 vim 中,你需要在括号 (
、)
和竖杠 |
前加上反斜杠,所以请尝试:
:%s/print\s*\(.\{-}\);/printnlog(\1);/g
\v
,否则您不必转义所有内容 - http://briancarper.net/blog/vim-regexes-are-awesome - Adam Neal\v
更容易,因为我不必转义所有内容;这使得正则表达式更易读一些。:h /\v
- http://briancarper.net/blog/vim-regexes-are-awesome
虽然您可以创建捕获组(就像您正在做的那样),但我认为最简单的方法是使用多个步骤完成工作,使用非常简单的正则表达式和“标志”词。例如:
:%s/print "testcode.*/printnlog(XXX&XXX);/
:%s/XXXprint //
:%s/;XXX//
这对你的需求足够吗?
%s/print\s*\("[^"]*"\)/printnlog(\1)
{-}
这个命令,我忘记了它。 - MBO