具有负面前瞻性的Regex不起作用

Regex with negative lookahead is not working

本文关键字:Regex 不起作用 前瞻性      更新时间:2023-09-26
Edit the Expression & Text to see matches.
Expression sample

这是有两行的文本文档。我想搜索"表达式"单词,这样它就不会跟在"匹配"单词后面。因此输出将与"Expression sample"行匹配。请帮助为此生成正则表达式。我尝试过使用下面的正则表达式,但这不起作用。非常感谢

^(.*)Expression(.*)(?!matches)$

在相同的情况下,正则表达式将匹配以下内容:

 Edit the Expression & Text to see matches.
^(.*     )Expression(.*                   )(?!matches)$

正如您所看到的,第二个.*已经消耗了字符串的其余部分,因此意味着前瞻性将不匹配(因为没有更多的字符(,并且行尾锚匹配。

要将matches不能出现在Expression之后的任何位置的要求编码为代码,您需要使用

Expression(?!.*matches)

相反。如果您迫切需要(.*),可以选择预修复和后修复。这个正则表达式本质上意味着Expression必须在某个地方匹配,而整个子表达式.*matchesExpression匹配之后必须不匹配。由于该子表达式包括.*,因此它将在其后的任何位置尝试匹配matches,如果它只匹配一次,则先行查找将失败。

/Expression(?!.*matches)/

是答案。感谢anubhava的帮助。