OR ケースをチェックする方法を見つけましたpreg_match( "/(word1|word2|word3)/i", $string );
。私が理解できないのは、AND ケースを一致させる方法です。文字列にすべての用語が含まれていることを確認したい (大文字と小文字を区別しない)。
4 に答える
先読みを使用して、単一の正規表現で 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
私はあなたの質問の状況について考えています。
これが状況です
words = "abcd","cdef","efgh"
文字列で一致する必要があります:
string = "abcdefgh"
REG.EXP を使用しない方がよいかもしれません
用語が表示される順序がわかっている場合は、次のようなものを使用できます。
preg_match("/(word1).*(word2).*(word3)/i", $string);
用語の順序が定義されていない場合は、おそらく 3 つの別々の式を使用して、それらがすべて一致することを確認するのが最善でしょう。単一の式も可能ですが、複雑になる可能性があります。
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);
, ループまたは複数の正規表現一致で使用する方が良いでしょう.