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

chx*_*chx 2 php regex

我与PHP的工作preg_match-我怎样才能找到如果双方foobar都存在,无论它是否是foobarbarfoosomething bar that foo.显然,类似的东西foo.*bar|bar.*foo会起作用,但是对于一个足够复杂的东西foo,bar我宁愿不要写两次.

Jer*_*rry 5

如果它只是一个测试,你可以很容易地做两个检查:一个用于foo,另一个用于bar.

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

(?=.*foo)(?=.*bar)
Run Code Online (Sandbox Code Playgroud)

每个都确保foo并且bar分别在字符串中的某个.*位置具有正则表达式指针所在的任何字符().

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

^(?=.*foo)(?=.*bar)
Run Code Online (Sandbox Code Playgroud)

  • `(?=.*foo)(?=.*bar)`有效,但是你应该添加一个`^`字符串锚的开头,以使它对于不匹配的字符串更快地失败_much_更快.如上所述,它必须在字符串中的每个位置执行两个前瞻,然后才能声明匹配失败. (2认同)