默认情况下,在正则表达式模式下,文档中的向后搜索不起作用。Nppp 在对话框中解释说,由于不直观的行为,该功能已被禁用:
默认情况下,向后正则表达式搜索是被禁用的,因为可能会出现意外结果。
我们在这里谈论的是什么样的意外结果,以及它们为什么会出现?
正则表达式的手册页提示了测试字符串和正则表达式的问题的性质,它们会在前向和后向操作中产生不同数量的匹配。
对于喜欢冒险的人来说,对话框所引用的手册页提供了有关启用向后正则表达式搜索的说明,请参见此处。
据报告,自 v7.8.7 版本以来,向后正则表达式搜索已损坏和/或被禁用。
检查某个功能被删除/隐藏的原因的最佳方法是检查软件的存储库(如果有)。有一个拉取请求提供了部分原因:
我可以找到一个非常简单的例子,说明它与插入符号配合得不太好。使用以下文本:
如果您在常规模式下查找
test.*?example
并将光标放在任意位置,它总会找到最接近的正确匹配。例如,如果您将其放在此处:它会
testexample
按预期找到相邻项。但是,如果您切换到后向模式并将光标放在此处:这没有多大意义,而且不一致地找到了第一行。
为什么会这样?不知道,也没有时间去分析,但这肯定与大多数正则表达式引擎(包括 N++ 使用的 Boost.Regex)向前而不是向后工作有关,而 Notepad++ 使用了一些向后功能的变通方法来模拟在相反方向上查找匹配项。然而,他们无法为光标位置实现完全可靠的变通方法,因此决定默认禁用方向更改。
可能的是,意外的结果可能是由于正则表达式可以搜索行或字符串中的第一个、后续的或最后一个字符或序列。
这意味着如果你从末尾开始向后工作,它可能会指定字符的第二次出现,也可能意味着倒数第二次出现。这取决于正则表达式的实现,可能不是IOTTMCO。