问题描述
假设我想匹配一个句子:
家在你身后,世界在前!
这样:
^.*(?<=(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 尝试了您的正则表达式,它似乎可以正常工作。