我正在寻找一个正则表达式来改变某些东西。像这样:(g)vim替换正则表达式
print "testcode $testvar \n";
在
printnlog("testcode $testvar \n");
我试图%s/print\s*(.\{-});/printnlog(\1);/g
但GVIM说
print\s*(.\{-});
不匹配。
我的错在哪里? 可以在'\ s'之后使用'*',因为后面的'{ - };'会停止贪婪?
在此先感谢。
我正在寻找一个正则表达式来改变某些东西。像这样:(g)vim替换正则表达式
print "testcode $testvar \n";
在
printnlog("testcode $testvar \n");
我试图%s/print\s*(.\{-});/printnlog(\1);/g
但GVIM说
print\s*(.\{-});
不匹配。
我的错在哪里? 可以在'\ s'之后使用'*',因为后面的'{ - };'会停止贪婪?
在此先感谢。
虽然你可以创建捕捉组(就像你在做什么),但我认为最简单的方法是用多个步骤完成这个工作,用非常简单的正则表达式和“标志”单词。例如:
:%s/print "testcode.*/printnlog(XXX&XXX);/
:%s/XXXprint //
:%s/;XXX//
在这些例子中,我使用“XXX”,表示稍后应该被修剪(你可以使用不会出现在你的代码的任何东西)边界。连字符(&)接受整个匹配字符串并将其插入到替换字符串中。
我不知道其他人,但我可以输入并执行这三个正则表达式的速度比我能想象的快得多。
这是足以满足您的需求?
%s/print\s*\("[^"]*"\)/printnlog(\1)
这个正则表达式还可以,但我已经标记了另一个答案为“接受”,不仅因为它是第一个工作正则表达式,但它记得在vim中跳过括号:) – Milde 2009-12-04 14:44:26
MBO的答案的伟大工程,但有时我觉得它更容易使用“非常神奇”选项\v
所以我没有逃避一切;使正则表达式更具可读性。
参见:
太好了,我正在搜索为此功能。 – 2009-12-04 14:47:07
上面评论了你的评论,因为我同意,它增加了可读性并为你节省了一些时间 – Milde 2009-12-04 14:51:15
+1。对于'{ - }',我在Vim中忘记了这个问题 – MBO 2009-12-04 14:30:33
在vim中找到了正则表达式的好网站 - > http://vimregex.com 享受 – Milde 2009-12-04 14:33:59