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