这是关于Perl正则表达式的一个非常具体的问题,我希望它不会不合适。
我有一个与几个单词中的一个匹配的正则表达式:
/foo|pizza|chicken/
和一个匹配5个或更多单词的人:
(?:\w+ ?){5,}
我需要将这两者组合成一个正则表达式(一个实现限制)。这有可能只有一个正则表达式吗?
提前致谢!
答案 0 :(得分:5)
是的,您可以使用positive lookahead assertion添加条件:
/^(?=.*\b(?:foo|pizza|chicken)\b)(?:\b\w+\b ?){5,}/
我添加了word boundary anchors以避免food
或pizzazz
等字词不匹配,并确保\w+
始终与整个字匹配。
稍微高效的替代方法使用possessive quantifiers来确保同样的事情:
/^(?=.*\b(?:foo|pizza|chicken)\b)(?:\w++ ?){5,}/