我正在尝试为$data['user']
搜索并替换$data['sessionUser']
。
然而,无论我使用什么搜索字符串,我总是会得到一个“找不到模式”。
那么,正确的搜索字符串是什么?我是否需要逃避这些角色?
:%s/$data['user']/$data['sessionUser']/g
答案 0 :(得分:3)
:%s/\$data\[\'user\'\]/$data['sessionUser']/g
我没有对此进行测试,但我想它应该可行。
答案 1 :(得分:3)
给出的答案没有错,但你可以这样做:
:%s/$data\['\zsuser\ze']/sessionUser/g
\zs
和\ze
可用于分隔受替换影响的匹配部分。
您不需要转义$
,因为它位于模式的开头,并且无法与此处的EOL匹配。而且您不需要转义]
,因为它没有匹配的起始[
。但是,如果你不记得所有规则,那么逃避这些角色肯定没有害处。请参阅:help pattern.txt获取完整详细信息,但不要试图一次性消化它!
如果你想获得幻想,你可以这样做:
:%s/$data\['\zsuser\ze']/session\u&/g
&
指的是整个匹配的文字(由\zs
和\ze
分隔,如果有的话),因此在这种情况下它会成为“用户”。在替换字符串中使用\u
会使下一个字符为大写。我希望这会有所帮助。
答案 2 :(得分:2)
在vim中搜索和替换几乎与sed
相同,因此请使用与此相同的转义:
:%s/\$data\['user'\]/$data['session']/g
请注意,您只需要在搜索部分(第一组//
之间的部分)中转义特殊字符。您需要在替换部分中转义的唯一字符是转义字符\
本身(您在此处未使用)。
答案 3 :(得分:1)
[
char在正则表达式中有意义。它代表character ranges。 $
char也有意义。它代表end-line anchor。所以你必须逃避很多事情。我建议您尝试使用this或one这样的小插件,并使用直观搜索。
答案 4 :(得分:0)
以下是您需要在Vim中转义的所有特殊搜索字符的列表:^$.*[~