2

我正在使用 PHP preg_match- 我如何才能找到两者是否都存在foobar无论它是foobarorbarfoo还是something bar that foo. 显然,类似的东西foo.*bar|bar.*foo会起作用,但要足够复杂foobar我非常不想写两次。

4

2 回答 2

5

如果它只是一个测试,您可以轻松地进行两项检查:一项是 for foo,另一项是 for bar

否则,如果您希望在单个正则表达式中使用它,则可以使用积极的前瞻:

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

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

编辑:另外,为了提高性能,您可以添加一个行首锚点,这样如果字符串中的一个或两个单词都不在字符串中,它就不必检查字符串中的每个位置:

^(?=.*foo)(?=.*bar)
于 2013-09-07T10:58:34.797 回答
0

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

于 2013-09-21T07:49:45.113 回答