正向前瞻有效,而负向后视无效

问题描述

假设我想匹配一个句子:

家在你身后,世界在前!

这样:

^.*(?<=(H|h)ome).*(w|W)orld.*(\.|!)$

这似乎工作正常。 (see on regex101)

现在假设我想排除“家”和“世界”这两个词的顺序相反的句子:

世界在你身后,家在前!

我试过这个 (regex101):

^.*(?<!(w|W)orld).*(H|h)ome.*(\.|!)$

这个不行... :-(

谁能解释一下如何用负面的后视或其他方式来实现它?...

解决方法

我会将您的要求表述为:

^(?i)(?!.*\bworld\b.*\bhome\b).*\bhome\b.*\bworld\b.*$

Demo

模式开始处的负前瞻断言 world 后面没有按该顺序跟随 home

,

正面和负面的前瞻/后视取决于您的正则表达式处理器。并非所有处理器都支持此功能。

如果我没记错的话,负向后视很少实现。

我在 https://regexr.com 尝试了您的正则表达式,它似乎可以正常工作。