Notepad++ 非连续行重复查找器正则表达式中的反向引用错误

Backreference Bug in Notepad++ Non-Consecutive Line Duplication Finder Regex

Notepad++ find/replace 在使用反向引用查找不一定连续的重复行时的行为中似乎存在错误。我想知道是否有人知道正则表达式可能存在什么问题,或者他们是否知道正则表达式引擎可能出现故障的原因?

详情

我想使用正则表达式在 Notepad++ 中查找重复行。重复项不一定是连续的,即在连续的行上,中间可以有行。我从这个开始 post:

https://medium.com/@heitorhherzog/compare-sort-and-delete-duplicate-lines-in-notepad-2d1938ed7009

但意识到那里提到的正则表达式只检查连续的重复项。所以我写了自己的正则表达式:

^(.+)$(?:(?:\s|.)+)^()$

上面基本上是在整行上捕获一些东西,然后匹配中间的一堆东西,然后在一行上捕获相同的东西。

怎么了

正则表达式有效,但只是有时有效。我无法弄清楚模式。到目前为止,我已经把它缩减到这个程度。如果我在替换模式 </code> 上执行 "Replace All",那么 "replace all" 只剩下第 3 行,即 "elative backreferences32"。这是错误的:</p> <pre><code>dasfdasfdsfasdfasdfadsfasdf elative backreferenceswe elative backreferences32 elative backreferencesd elative backreferencdesdfdasdfsdafsd asfasdfasdfasdfasdfasfdsaasdfas asdfasdfafds asdfasfdsafasd asdfdasfsd elative backreferencessfhdfg x y x

但是如果我从该文件中删除 any 行,那么只有连续的行 x 然后 y 然后 x 被替换为如我所料,只有一行 xx

备注

假设

截图

之前

在没有匹配换行之后(预期配置)

匹配换行符后(用于实验)

(?:\s|.) 应该避免,因为它会导致意外行为,我建议改用 [\s\S]

  • 查找内容:^(.+)$[\s\S]+?^()$
  • 替换为: