Vim正则搜索使用+量词无法匹配的原因咨询
Vim正则搜索使用+量词无法匹配的原因咨询
嗨,我来帮你搞懂这个问题!其实核心原因是Vim默认用的是基础正则表达式(BRE),和你可能习惯的其他正则引擎(比如Perl、JS里的)不太一样~
先还原你的操作场景:
你在Vim里打开的代码片段是:
if ($_POST['action']=="edit" || $_POST['action']=="add") {
你做了三次搜索尝试:
- 用
/\$_POST\['\w搜索:能匹配到$_POST['a这类开头部分,对应你看到的匹配成功的高亮结果 - 用
/\$_POST\['\w*搜索:能完整匹配到$_POST['action,对应你看到的全词高亮的结果 - 但用
/\$_POST\['\w+搜索时,底部提示“Pattern not found”,完全找不到匹配——这就是你疑惑的点对吧?
问题出在Vim的正则规则上:在默认的BRE模式里,+只是一个普通的字符,不是表示“一个或多个”的量词!它会被当成你要搜索的内容的一部分,而你的代码里$_POST['action后面根本没有+这个字符,所以自然搜不到任何结果~
那怎么让+实现“一个或多个单词字符”的功能呢?有两个简单的解决办法:
- 方法一:给
+加转义,写成\+,也就是把搜索模式改成/\$_POST\['\w\+,这样\+就会被识别为“一个或多个”的量词,就能正常匹配到$_POST['action了 - 方法二:切换到Vim的扩展正则表达式(ERE)模式,在搜索开头加
\v前缀,比如/\v$_POST['\w+(ERE模式里很多转义符号可以省略,写起来更简洁),这时候+就直接是“一个或多个”的量词啦
你可以试试这两种方法,肯定能得到你想要的匹配结果~
备注:内容来源于stack exchange,提问作者user3629081
相关产品推荐
相关产品推荐

