我正在尝试在gvim中搜索以下模式:
arrayA[*].entryx
希望它符合以下条件:
arrayA[size].entryx
arrayA[i].entryx
arrayA[index].entryx
但它会打印消息,说明找不到Pattern,即使文件中存在上述行。
arrayA[.].entryx
仅匹配arrayA [i] .entryx 即在[]括号之间只有一个字符。
如何匹配[]括号之间的多个字符?
答案 0 :(得分:2)
这是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 Character Class详细信息
具体来说,Special Characters Inside a Bracketed Character Class
部分
[
字符启动字符类(CCL)后,需要转义的内容的规则会发生变化。
答案 1 :(得分:1)
*
重复前一个字符;并[
启动一个字符类。所以,你需要更像的东西:
/arrayA\[[^]]*]\.entryx/
查找文字[
,除]
以外的一系列零个或多个字符,文字]
,文字.
和{{1} }。
答案 2 :(得分:0)
永远记住,在VIM中,您需要浏览一些特殊字符,例如[
,]
,{
,}
和.
。如前所述,*
重复前一个字符,你只需使用/arrayA\[.*\]\.entryx
,但*
是贪婪的字符,它可能会匹配一些奇怪的东西,添加以下行您的文件,您将理解:arrayA[size].entryx = arrayB[].entryx
“更安全”的正则表达式将是:
/arrayA\[.\{-\}\]\.entryx
.\{-\}
以非贪婪的方式匹配任何角色,对某些情况来说,女巫更安全。