preg_grep没有顺序的多个单词

时间:2013-05-30 02:30:54

标签: php grep

我正在尝试使用preg_grep搜索任何包含 all 我的模式中列出的单词的任何值的数组。

假设我要搜索的单词如下: 苹果 梨 香蕉

我试过了:

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

返回包含三个单词

中任意一个的字符串
$result = preg_grep("/(apple.*pear.*banana)/i", $array);

返回包含全部3的字符串,但它们必须按顺序排列。

如何执行无序的preg_grep?

2 个答案:

答案 0 :(得分:4)

在单个正则表达式中执行“全部匹配”很困难 - 您需要枚举所有可能的订单,即O(n!)。相反,请使用array_filter()

array_filter($array, function($x) {
    return preg_match('/apple/', $x) && preg_match('/pear/', $x) && preg_match('/banana/', $x);
});

答案 1 :(得分:2)

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

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