我正在尝试使用preg_grep搜索任何包含 all 我的模式中列出的单词的任何值的数组。
假设我要搜索的单词如下: 苹果 梨 香蕉
我试过了:
$result = preg_grep("/(apple|pear|banana)/i", $array);
返回包含三个单词
中任意一个的字符串$result = preg_grep("/(apple.*pear.*banana)/i", $array);
返回包含全部3的字符串,但它们必须按顺序排列。
如何执行无序的preg_grep?
答案 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);