2

OR ケースをチェックする方法を見つけましたpreg_match( "/(word1|word2|word3)/i", $string );。私が理解できないのは、AND ケースを一致させる方法です。文字列にすべての用語が含まれていることを確認したい (大文字と小文字を区別しない)。

4

4 に答える 4

5

先読みを使用して、単一の正規表現で 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
于 2010-01-02T19:10:19.557 に答える
1

私はあなたの質問の状況について考えています

これが状況です

words = "abcd","cdef","efgh"

文字列で一致する必要があります:

string = "abcdefgh"

REG.EXP を使用しない方がよいかもしれません

于 2010-01-02T19:18:58.417 に答える
0

用語が表示される順序がわかっている場合は、次のようなものを使用できます。

preg_match("/(word1).*(word2).*(word3)/i", $string);

用語の順序が定義されていない場合は、おそらく 3 つの別々の式を使用して、それらがすべて一致することを確認するのが最善でしょう。単一の式も可能ですが、複雑になる可能性があります。

于 2010-01-02T19:10:01.743 に答える
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);, ループまたは複数の正規表現一致で使用する方が良いでしょう.

于 2010-01-02T19:10:34.207 に答える