我想出了如何检查OR案例preg_match( "/(word1|word2|word3)/i", $string );
。我无法弄清楚如何匹配AND案例。我想检查字符串是否包含所有术语(不区分大小写)。
答案 0 :(得分:5)
可以使用lookahead在单个正则表达式中进行AND匹配,例如:
preg_match('/^(?=.*word1)(?=.*word2)(?=.*word3)/i', $string)
然而,它可能更清晰,也许在正则表达式之外做得更快:
preg_match('/word1/i', $string) && preg_match('/word2/i', $string) && preg_match('/word3/i', $string)
或者,如果您的目标字符串与word1
一样简单:
stripos($string, 'word1')!==FALSE && stripos($string, 'word2')!==FALSE && stripos($string, 'word3')!==FALSE
答案 1 :(得分:1)
我在考虑使用和案例可能导致问题的问题:
这是情况
words = "abcd","cdef","efgh"
必须匹配字符串:
string = "abcdefgh"
也许你不应该使用REG.EXP
答案 2 :(得分:0)
如果您知道条款的显示顺序,可以使用以下内容:
preg_match("/(word1).*(word2).*(word3)/i", $string);
如果未定义术语的顺序,您可能最好使用3个单独的表达式并检查它们是否匹配。单个表达式是可能的,但可能很复杂。
答案 3 :(得分:0)
preg_match( "/word1.*word2.*word3)/i");
这样可行,但它们必须按照所述顺序显示,您当然可以替换preg_match("/(word1.*word2.*word3|word1.*word3.*word2|word2.*word3.*word1|
word2.*word1.*word3|word3.*word2.*word1|word3.*word1.*word2)/i");
但那很可爱,你必须疯狂!在循环中使用strpos($haystack,$needle);
或多个正则表达式匹配会更好。