在Neovim中用负向预搜索查找伪XML文件中的未转义&符号
在Neovim中实现等价的负向预搜索
Neovim(及Vim)的正则语法和Silver Search使用的Perl兼容正则(PCRE)存在差异,它不支持(?!...)这类Perl风格的负向预查,而是通过\@!后缀实现相同逻辑。针对你给出的正则,有两种等价转换方式:
方式1:默认Magic模式写法
直接在/搜索命令中输入:
&\%\(\%(apos\|quot\|[gl]t\|amp\);\|#\)\@!
各部分说明:
&:匹配目标字符&\%\(:开启非捕获组,将后续两个分支作为一个整体\%(apos\|quot\|[gl]t\|amp\);:匹配apos;/quot;/gt;/lt;/amp;这类HTML实体后缀\|#:或者匹配单独的#字符
\)\@!:断言&之后的内容完全不匹配前面的非捕获组,以此排除合法实体开头的&
方式2:Very Magic模式写法(更简洁)
先加\v启用Very Magic模式,语法更接近你熟悉的PCRE,减少转义字符:
\v&( (apos|quot|[gl]t|amp); | # )@!
各部分说明:
\v:开启Very Magic模式,简化正则书写&:匹配&(...):将两个分支作为整体的非捕获组@!:负向预查断言,确保&之后不匹配组内的任何内容
使用步骤
打开目标文件后,按/键,输入上述任意一种正则表达式,回车即可在当前文件内搜索符合条件的&。
内容的提问来源于stack exchange,提问作者Jasper Martin
相关产品推荐
相关产品推荐

