我正在尝试在 gvim 中搜索以下模式:
arrayA[*].entryx
希望它会匹配以下内容:
arrayA[size].entryx
arrayA[i].entryx
arrayA[index].entryx
但即使文件中存在上述行,它也会打印消息说找不到模式。
arrayA[.].entryx
仅匹配 arrayA[i].entryx 即 [] 大括号之间只有一个字符。
我应该怎么做才能匹配 [] 大括号之间的多个字符?
这是 PCRE 表达式的详细信息
/arrayA\[[^]]*]\.entryx/
^^^^^ # 0 or more characters before a ']'
^^ ^^ # Escaped '[' & '.'
^ # Closing ']' -- does not need to be escaped
^^^^^^ ^^^^^^ # Literal parts
如果你想找arrayA[X].entryx哪里,至少有一个字符在[],
你需要替换 \[[^]]*为\[[^]]\+
ps:注意我的编辑——我已经把它改成了\*——*你也不能逃避它。
但是,你需要逃避+ :-)
Update关于您的评论:
虽然我的评论回答了您关于]广泛转义的问题,但
有关更多详细信息,请查看Perl 字符类详细信息。
具体来说,Special Characters Inside a Bracketed Character Class节。角色启动字符类 (CCL)
后,需要转义的规则会发生变化。[
*重复前一个字符;并[开始一个字符类。所以,你需要更多类似的东西:
/arrayA\[[^]]*]\.entryx/
这会查找文字[、一系列零个或多个字符,而不是]文字]、文字.和entryx.
永远记住,在 VIM 中您需要转义一些特殊字符,例如[, ], {,}和.. 如前所述,*重复上一个字符,使用这个你可以简单地使用/arrayA\[.*\]\.entryx,但是这个*是贪婪的字符,它可能会匹配一些奇怪的东西,将以下行添加到你的文件中,你会明白:arrayA[size].entryx = arrayB[].entryx
“更安全”的正则表达式是:
/arrayA\[.\{-\}\]\.entryx
.\{-\}以非贪婪的方式匹配任何角色,女巫在某些情况下更安全。