gvim搜索使用正则表达式匹配多个字符

时间:2012-05-21 16:00:56

标签: regex search vim

我正在尝试在gvim中搜索以下模式:

arrayA[*].entryx

希望它符合以下条件:

arrayA[size].entryx  
arrayA[i].entryx
arrayA[index].entryx

但它会打印消息,说明找不到Pattern,即使文件中存在上述行。

arrayA[.].entryx  

仅匹配arrayA [i] .entryx 即在[]括号之间只有一个字符。

如何匹配[]括号之间的多个字符?

3 个答案:

答案 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

.\{-\}以非贪婪的方式匹配任何角色,对某些情况来说,女巫更安全。