Notepad++零长度匹配场景下Replace All功能失效问题咨询
问题原因
- 核心触发点为查找规则中
(?<lastline>\G\Z)的匹配逻辑与Notepad++内置Boost正则引擎的「全部替换」执行逻辑不兼容:\G锚点的作用是匹配上一次匹配结束的位置,单次点击替换时,最后一次内容匹配完成后光标停留在文本末尾,下一次查找可命中\G\Z组合锚点;但批量执行全部替换时,引擎完成所有文本内容扫描后不会主动触发末尾空位置的匹配校验,导致lastline分组永远无法命中,自然不会输出末尾的</p>闭合标签。 - 查找全部功能返回匹配结果少1条的原因也和该逻辑有关,末尾的空匹配不会被计入查找结果。
修复方案
直接修改查找正则的末尾锚点规则,去掉\G绑定,仅保留文本末尾匹配即可,修改后的查找正则如下:
((?<startpesterlog>\G-{2})|(?<endpesterlog>-{2}))|((?<extra>\[TG])|(?<extra2>\[EB]))|((?<DavePrefix>^TG: )(?<davetext>.*))|((?<JohnPrefix>^EB: )(?<johntext>.*))|(?<lastline>\z)
替换规则无需修改,修改后执行「全部替换」即可正常生成末尾的</p>闭合标签,查找全部也会返回正确的匹配数量。
操作时需确保查找替换面板勾选「正则表达式」选项,不要勾选「.匹配换行符」选项。
内容的提问来源于stack exchange,提问作者Ωmega
相关产品推荐
相关产品推荐

