1

我正在尝试使用 preg_grep 在数组中搜索包含我的模式中列出的所有单词的任何值,以任何顺序。

假设我要搜索的词如下:apple pearbanana

我试过了:

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

它返回包含三个单词中的任何一个的字符串

$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 回答
2

您也可以尝试使用前瞻模式..

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

于 2013-05-30T03:03:39.653 回答