我正在使用 PHP preg_match
- 我如何才能找到两者是否都存在foo
,bar
无论它是foobar
orbarfoo
还是something bar that foo
. 显然,类似的东西foo.*bar|bar.*foo
会起作用,但要足够复杂foo
,bar
我非常不想写两次。
问问题
93 次
2 回答
5
如果它只是一个测试,您可以轻松地进行两项检查:一项是 for foo
,另一项是 for bar
。
否则,如果您希望在单个正则表达式中使用它,则可以使用积极的前瞻:
(?=.*foo)(?=.*bar)
每个都确保foo
和bar
分别位于字符串中的某个.*
位置,其中包含正则表达式指针所在的任何字符 ( )。
编辑:另外,为了提高性能,您可以添加一个行首锚点,这样如果字符串中的一个或两个单词都不在字符串中,它就不必检查字符串中的每个位置:
^(?=.*foo)(?=.*bar)
于 2013-09-07T10:58:34.797 回答
0
我认为第二个断言只是一个开销,/^(?=.*?foo).*?bar/
也足够了。如果您希望在文本中找到您的字符串,我建议使用非贪婪形式。我还应该注意,该点仅匹配非换行符,这可能是多行字符串的问题。
于 2013-09-21T07:49:45.113 回答