未找到E486模式:数组[0]

时间:2014-10-30 10:47:07

标签: regex vim

我现在用vim制作一些与学习ct相关的代码,而且我对替换函数有一个问题:

我已经对Google和vim教程以及其他stackoverflow问题进行了一些研究。

但我没有设法找到/理解我的问题的答案。

为了做到这一点,我想替换指针表示法的数组。

:%s/name[0]/*(name)/g

此命令会发出以下错误: E486:找不到模式:名称[0]

如果我在没有[0]的情况下执行相同的命令,它可以正常工作,但它不是我想做的事情

:%s/name/*(name)/g

我如何进行搜索/替换考虑那些方形的braquet []

提前感谢您的帮助

3 个答案:

答案 0 :(得分:4)

您需要使用\转义方括号,这样才能正常工作:s/name\[0\]/new_name(0)/

原因在于,在大多数正则表达式引擎中,[]用于对多个字符进行分组(请参阅:h /character-classes),因此[abc]将匹配a,b或c。

请注意,您可以使用\M告诉vim使用nomagic(用法:s/\Mname[0]/new_name/)。

请参阅:h magic

答案 1 :(得分:2)

您需要使用某些转义序列,例如name\[0\]\表示[]被用作输入文字,而不是承载/表示任何特殊功能[如分组]。

答案 2 :(得分:2)

方括号在正则表达式中是特殊的:它们表示Character Class。所以你的正则表达式尝试匹配name0(因为类中只有一个字符)。

要匹配文字括号,请使用反斜杠转义它们:

name\[0\]