Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex (g) 替换正则表达式_Regex_Vim - Fatal编程技术网

Regex (g) 替换正则表达式

Regex (g) 替换正则表达式,regex,vim,Regex,Vim,我正在寻找一个正则表达式,它将改变如下内容: print "testcode $testvar \n"; 在 printnlog(“testcode$testvar\n”) 我尝试了%s/print\s*(.\{-})/printnlog(\1)/g但gvim说 print\s*(.\{-}); 不匹配 我的错在哪里? 在'\s'之后使用'*'可以吗,因为后面的'{-};'能阻止贪婪吗 提前感谢。虽然您可以创建捕获组(就像您正在做的那样),但我认为最简单的方法是分多个步骤完成这项工作,使用非

我正在寻找一个正则表达式,它将改变如下内容:

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”来表示以后应该修剪的边界(您可以使用代码中没有出现的任何东西)。符号(&)获取整个匹配字符串并将其插入替换字符串


我不知道其他人的情况,但我键入和执行这三个正则表达式的速度比我通过捕获组所能想到的要快。

在vim中,你必须用反斜杠在
|
前面加上反斜杠,所以试试看

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

这足以满足你的需要吗

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

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

另见:

  • Vim中的
    :h/\v

简直不敢相信我忘了跳出括号:)你的正则表达式工作得非常好谢谢MBO,删除了原来的并在下面修复了它!除非您使用
\v
,否则您不必逃避一切-+1对于\v,它将在未来+1中为(我)节省大量反斜杠。对于
{-}
,我忘记了在vim中找到了一个很好的regex站点,在vim->Enjoy中这个regex也可以,但我已经将另一个答案标记为“接受”,不仅因为它是第一个工作的regex,而且它还记得在vim中跳出括号:)太好了,我正在搜索这样的功能。投票支持你的评论,因为我同意,它增加了可读性并为您节省了一些时间