VIM 正则表达式无法搜索和替换括号之间的字符

VIM 正则表达式无法搜索和替换括号之间的字符

我想使用正则表达式来转换这些:

<input type="text" name="salutation" value={salutation} />
<input type="text" name="first_name" value={first_name} />

变成这些:

<input type="text" name="salutation" value="" />
<input type="text" name="first_name" value="" />

因此在 VIM 中,我尝试了以下所有命令:

:0,$s/value={.+}/value=""/gc
:0,$s/value={(.)+}/value=""/gc
:0,$s/value={[a-zA-Z0-9_\.]+}/value=""/gc
:0,$s/value={[^}]+}/value=""/gc

但我一直收到消息“未找到图案”。我做错了什么?

答案1

在替换中使用特殊字符时,某些量词需要进行转义。

这包括+,因此您应该输入\+

量词、贪婪和非贪婪、转义

看:4.3 量词、贪婪和非贪婪

答案2

你的正则表达式实际上是这样做的:

:0,$s/value={.+}/value=""/gc=重复字符串“{.+}“ 值为“”

:0,$s/value={(.)+}/value=""/gc= 重复字符串“{(.)+}“ 值为“”

:0,$s/value={[a-zA-Z0-9_\.]+}/value=""/gc=重复字符串“{X+}“ 值为“” 其中X是 [] 内的任意字符范围

:0,$s/value={[^}]+}/value=""/gc=重复字符串“{X+}“ 值为“” 其中X不是字符 '}'

因此,如果您打算使用“+”作为量词,则应使用“\+”。否则,就像在所有模式中一样,搜索的是实际的“+”,而不是1 个或多个前面的字符

相关内容