(g)vim替换正则表达式

时间:2009-12-04 14:21:14

标签: regex vim

我正在寻找一个会改变的正则表达式。像这样:

print "testcode $testvar \n";

in

printnlog("testcode $testvar \n");

我试过%s/print\s*(.\{-});/printnlog(\1);/g,但gvim说

print\s*(.\{-});

不匹配。

我的错在哪里? 可以在'\ s'之后使用'*',因为之后的'{ - };'会阻止贪婪吗?

提前致谢。

4 个答案:

答案 0 :(得分:8)

在vim中,您必须使用反斜杠添加()|,所以请尝试

:%s/print\s*\(.\{-}\);/printnlog(\1);/g

答案 1 :(得分:4)

MBO的回答很有效,但有时候我发现使用“非常神奇”的选项\v更容易,所以我不必逃避一切;使正则表达式更具可读性。

另见:

答案 2 :(得分:0)

虽然您可以创建捕获组(就像您正在做的那样),但我认为最简单的方法是使用非常简单的正则表达式和“标记”字来分多步完成工作。例如:

:%s/print "testcode.*/printnlog(XXX&XXX);/
:%s/XXXprint //
:%s/;XXX//

在这些示例中,我使用“XXX”来表示稍后应该修剪的边界(您可以使用代码中未出现的任何内容)。 &符号(&)获取整个匹配字符串并将其插入替换字符串。

我不了解其他人,但我可以比通过捕获组更快地输入和执行这三个正则表达式。

答案 3 :(得分:0)

这是否足以满足您的需求?

%s/print\s*\("[^"]*"\)/printnlog(\1)