我有一个包含这样的字符串的文件:
print $hash_xml->{'div'}{'div'}{'div'}[1]...
Run Code Online (Sandbox Code Playgroud)
我想替换{'div'}{'div'}{'div'}[1]别的东西.
所以我试过了
%s/{'div'}{'div'}{'div'}[1]/by something else/gc
Run Code Online (Sandbox Code Playgroud)
找不到字符串.不过,我觉得我必须逃脱{,},[和]
还是找不到字符串.
所以我试图搜索一个{,它找到了它们.然后我试着搜索{'div'}{'div'}{'div'}它再次发现它.
然后 {'div'}{'div'}{'div'}[1仍然被发现.
找到 {'div'}{'div'}{'div'}[1]
我不得不使用 %s/{'div'}{'div'}{'div'}[1\]
为什么?
Linux上的vim 7.3
在正则表达式中使用[]来包装一系列可接受的字符.
当两者都未提供时,vim将搜索字符串视为正则表达式.
所以当你把它遗漏掉,或者逃避最后一个字符时,vim不能解释正则表达式上下文中的单个括号,文字搜索也是如此(基本上它是搜索字符串最好的).
就个人而言,我会逃避打开和关闭方括号,以确保其含义清晰.
那是因为[和]字符用于构建搜索模式.
请参阅:h pattern并使用帮助文件pattern.txt尝试以下实验:
使用"[9-0]"模式(不带引号)搜索/[0-9]将匹配0到9之间的每个数字(请参阅:h \[)
现在,如果您尝试/\[0-9]或者/[0-9\]您将匹配整个模式:零,连字符和方括号内的九个.那是因为当你逃脱其中一个[或]操作员[*]不再存在时.
使用您的搜索模式,/{'div'}{'div'}{'div'}[1\]并且/{'div'}{'div'}{'div'}\[1]应匹配您想要的相同模式,同时/{'div'}{'div'}{'div'}[1]匹配字符串{'div'}{'div'}{'div'}1.