我正在使用 Notepad++ v7.3.3,并且正在测试以下正则表达式:
源文本
aa
图案
(?<!a)a
这是回归二匹配。第一个 a,第二个 a。当在 regex101 上测试此表达式它只返回一个匹配项(第一个 a)。
为什么 Notepad++ 也匹配第二个 a?这可能是一个错误吗?
答案1
这不是一个错误……当您选择向下时,Notepad++“搜索”不会识别光标前的任何字符。当您选择第一个 a 时,光标会移动。因此,一旦光标经过第一个 a,它就会匹配剩余的 a。对于搜索“向上”也是如此,它将忽略从光标到文档末尾的任何字符。
您的正则表达式并没有失败,只是您必须记住并理解文本编辑器的本质。
Regex 101 不会像 Notepad++ 那样执行“部分”字符串查找。但是,您可以通过在正则表达式中使用锚点来纠正此问题。您可以使用 ^ 将此正则表达式锚定到行首。这样,您就不会在第二个 a 上获得匹配。
^(?<!a)a