Perl正则表达式中的多个条件

时间:2016-03-31 16:34:35

标签: regex perl

这是关于Perl正则表达式的一个非常具体的问题,我希望它不会不合适。

我有一个与几个单词中的一个匹配的正则表达式:

/foo|pizza|chicken/

和一个匹配5个或更多单词的人:

(?:\w+ ?){5,}

我需要将这两者组合成一个正则表达式(一个实现限制)。这有可能只有一个正则表达式吗?

  • 我喜欢吃很多披萨。 应匹配
  • 我喜欢披萨上的鸡肉。 应匹配
  • 我需要正则表达式的帮助。 不匹配
  • 我喜欢foo。 不匹配

提前致谢!

1 个答案:

答案 0 :(得分:5)

是的,您可以使用positive lookahead assertion添加条件:

/^(?=.*\b(?:foo|pizza|chicken)\b)(?:\b\w+\b ?){5,}/

测试live on regex101.com

我添加了word boundary anchors以避免foodpizzazz等字词不匹配,并确保\w+始终与整个字匹配。

稍微高效的替代方法使用possessive quantifiers来确保同样的事情:

/^(?=.*\b(?:foo|pizza|chicken)\b)(?:\w++ ?){5,}/

测试live on regex101.com