Ben bir OR davayı, preg_match( "/(word1|word2|word3)/i", $string );
nasıl kontrol anladım. Ne ben çözemiyorum bir AND davayı maç nasıl. Ben dize TÜM terimleri (harf duyarsız) içerdiğini kontrol etmek istiyorum.
Bu lookahead kullanan, örneğin tek bir regex bir AND maç yapmak mümkün.:
preg_match('/^(?=.*word1)(?=.*word2)(?=.*word3)/i', $string)
Ancak, muhtemelen daha net ve sadece regex dışında bunu yapmak için belki daha hızlı:
preg_match('/word1/i', $string) && preg_match('/word2/i', $string) && preg_match('/word3/i', $string)
ya da, hedef dizeleri gibi basit olmadığını word1
:
stripos($string, 'word1')!==FALSE && stripos($string, 'word2')!==FALSE && stripos($string, 'word3')!==FALSE
Eğer şartlar görüneceği sırasını biliyorsanız, aşağıdaki gibi bir şey kullanabilirsiniz:
preg_match("/(word1).*(word2).*(word3)/i", $string);
Terimlerin sırası tanımlı değilse, muhtemelen en iyi 3 ayrı ifadeler kullanarak ve hepsi uyumlu olduğunu kontrol edilecektir. Tek bir ifadesi mümkün ama büyük olasılıkla karmaşık.
preg_match( "/word1.*word2.*word3)/i");
This works but they must appear in the stated order, you could of course alternate preg_match("/(word1.*word2.*word3|word1.*word3.*word2|word2.*word3.*word1|
word2.*word1.*word3|word3.*word2.*word1|word3.*word1.*word2)/i");
Ama oldukça herendous ve deli olması gerekirdi şu!, Sadece bir döngü ya da birden fazla regex maçlarda strpos($haystack,$needle);
kullanmak güzel olurdu.