我正在尝试在 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
.\{-\}
以非贪婪的方式匹配任何角色,女巫在某些情况下更安全。