1

パターンにリストされているすべての単語を任意の順序で含む値について、preg_grep を使用して配列を検索しようとしています。

検索したい単語は次のとおりであると仮定します: アップル ナシ バナナ

私が試してみました:

$result = preg_grep("/(apple|pear|banana)/i", $array);

3 つの単語のいずれかを含む文字列を返します

$result = preg_grep("/(apple.*pear.*banana)/i", $array);

3つすべてを含む文字列を返しますが、それらは順番に並んでいる必要があります.

順不同の preg_grep を実行するには?

4

2 に答える 2

4

単一の正規表現で「すべてに一致」させるのは困難です。考えられるすべての順序を列挙する必要があります。これは O(n!) です。代わりに、次を使用しますarray_filter()

array_filter($array, function($x) {
    return preg_match('/apple/', $x) && preg_match('/pear/', $x) && preg_match('/banana/', $x);
});
于 2013-05-30T02:37:20.403 に答える