我是否刚刚发现了 Notepad++ 的后视实现中的一个错误?

我是否刚刚发现了 Notepad++ 的后视实现中的一个错误?

我正在使用 Notepad++ v7.3.3,并且正在测试以下正则表达式:

源文本

aa

图案

(?<!a)a

这是回归匹配。第一个 a,第二个 a。当在 regex101 上测试此表达式它只返回一个匹配项(第一个 a)。

为什么 Notepad++ 也匹配第二个 a?这可能是一个错误吗?

答案1

这不是一个错误……当您选择向下时,Notepad++“搜索”不会识别光标前的任何字符。当您选择第一个 a 时,光标会移动。因此,一旦光标经过第一个 a,它就会匹配剩余的 a。对于搜索“向上”也是如此,它将忽略从光标到文档末尾的任何字符。

您的正则表达式并没有失败,只是您必须记住并理解文本编辑器的本质。

Regex 101 不会像 Notepad++ 那样执行“部分”字符串查找。但是,您可以通过在正则表达式中使用锚点来纠正此问题。您可以使用 ^ 将此正则表达式锚定到行首。这样,您就不会在第二个 a 上获得匹配。

^(?<!a)a

相关内容