Notepad++中如何反向匹配正则表达式选中的内容?我的反向正则为何仅生效一行?
Notepad++中如何反向匹配正则表达式选中的内容?我的反向正则为何仅生效一行?
为啥你的反向正则只生效一行?
问题出在你写的正则逻辑和Notepad++正则引擎的默认行为上:
你用的^(?!.*(.*)\R.+\.png" alt\b).+\R里,.符号在默认模式下不会匹配换行符,所以断言里的.*\R根本没法跨两行匹配到你原本的目标模式(一行内容+下一行带.png" alt的行)。这就导致这个前置断言几乎总是“成立”,但又因为+\R的限制,只能匹配单行,最终只会选中某一行,完全达不到反向匹配的效果。
正确的解决办法
这里给你两种靠谱的方案,按需选择:
方案1:用「标记+反向选择」(最简单直观)
这是Notepad++里处理这类跨行反向匹配最省心的方式:
- 按下
Ctrl+F打开查找框,切换到「标记」标签页; - 在「查找内容」里输入你原本能选中目标行的正则:
(.*)\R.+\.png" alt\b; - 勾选「正则表达式」,注意不要勾选「.匹配换行符」(因为你的原正则是匹配两行,不需要让
.跨行); - 点击「标记全部」,此时所有符合原模式的两行都会被打上标记;
- 回到编辑区域,右键点击任意一个被标记的行,选择「书签」→「反向选择书签行」,这样就选中了所有不匹配原模式的行。
方案2:修改反向正则表达式
如果你一定要用正则直接匹配目标行,可以用这个调整后的正则(记得勾选「正则表达式」选项):
^(?!.*\R.*\.png" alt\b|.*\.png" alt\b.*).+$
这个正则的逻辑是:匹配所有行,排除两种情况——要么是“当前行+下一行包含.png" alt”的行,要么是本身包含.png" alt的行,剩下的就是你要的反向匹配内容。
备注:内容来源于stack exchange,提问作者Pubg Mobile
相关产品推荐
相关产品推荐

