两个子表达的PCRE正则表达式是否存在?

时间:2013-09-07 10:54:04

标签: php regex

我正在使用PHP preg_match - 无论是foo还是bar还是{{}},我如何找到foobarbarfoo是否存在{1}}。显然something bar that foo之类的东西会起作用,但是对于一个足够复杂的foo.*bar|bar.*foofoo,我宁愿不再写两次。

2 个答案:

答案 0 :(得分:5)

如果只是测试,您可以轻松进行两项检查:一项针对foo,另一项针对bar

否则,如果你想在一个正则表达式中使用它,你可以使用积极的前瞻:

(?=.*foo)(?=.*bar)

每个都确保foobar分别位于字符串中的某个位置,其中包含正则表达式指针所在的任何字符(.*)。

编辑:另外,为了提高性能,您可以添加行锚的开头,这样如果字符串中不包含任何一个或两个单词,就不必检查字符串中的每个位置:

^(?=.*foo)(?=.*bar)

答案 1 :(得分:0)

我认为第二个断言只是开销,/^(?=.*?foo).*?bar/也足够了。如果您希望在文本中找到您的字符串,我建议使用非贪婪的表单。我还应该注意,该点只匹配非换行符,这可能是多行字符串的问题。