Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_grep无顺序多个单词_Php_Grep - Fatal编程技术网

Php preg_grep无顺序多个单词

Php preg_grep无顺序多个单词,php,grep,Php,Grep,我正在尝试使用preg_grep搜索一个数组,以查找包含模式中列出的所有单词的任何值(以任何顺序) 假设我要搜索的单词如下: 苹果 梨 香蕉 我试过: $result = preg_grep("/(apple|pear|banana)/i", $array); 返回包含这三个单词中任何一个的字符串 $result = preg_grep("/(apple.*pear.*banana)/i", $array); 返回包含所有3个元素的字符串,但它们必须按顺序排列 如何执行无序preg_grep

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

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

我试过:

$result = preg_grep("/(apple|pear|banana)/i", $array);
返回包含这三个单词中任何一个的字符串

$result = preg_grep("/(apple.*pear.*banana)/i", $array);
返回包含所有3个元素的字符串,但它们必须按顺序排列


如何执行无序preg_grep?

在单个regexp中进行全部匹配很困难-您需要枚举所有可能的订单,这是打开的!。相反,请使用数组过滤器:


在单个regexp中进行全部匹配很困难-您需要枚举所有可能的订单,这是打开的!。相反,请使用数组过滤器:


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


preg_grep/?=*苹果?=*梨?=*香蕉。*/,$array

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


preg_grep/?=*苹果?=*梨?=*香蕉。*/,$array

谢谢你的回答。我以前从未遇到过数组之间的&&运算符,这是如何工作的?另外,如何将其扩展到使用单词数组?我不会在数组之间使用它。preg_match返回true或false,而不是数组。对不起,我完全误解了我以为你还在使用preg_grep。对于这个愚蠢的问题,我深表歉意。我很难将其扩展到一个“单词”数组,我意识到这个数组超出了原始问题的范围,因为似乎没有一种简单的方法可以将数组传递给回调函数,除了创建概述的另一个类之外:您应该能够使用闭包和使用选项来完成它。谢谢您的回答。我以前从未遇到过数组之间的&&运算符,这是如何工作的?另外,如何将其扩展到使用单词数组?我不会在数组之间使用它。preg_match返回true或false,而不是数组。对不起,我完全误解了我以为你还在使用preg_grep。对于这个愚蠢的问题,我深表歉意。我很难将其扩展到一个“单词”数组,我意识到这个数组超出了原始问题的范围,因为似乎没有一种简单的方法可以将数组传递给回调函数,除了创建概述的另一个类之外:您应该能够使用闭包和use选项来完成。我认为lookahead不允许可变长度模式。我一直使用这些类型的模式来验证密码格式。。i、 e.至少1个数字,1个大写字母等。我之所以选择此解决方案,是因为我使用xdebug分析了此解决方案和Barmar的解决方案,并发现对于我的4000个字符串和3个搜索词的列表,此解决方案的执行速度平均比执行数组_筛选和多个grep快4倍。我认为lookahead不允许可变长度模式。我一直使用这些类型的验证密码格式的模式。。i、 e.至少1个数字、1个大写字母等。我之所以选择此解决方案,是因为我使用xdebug分析了此解决方案和Barmar的解决方案,发现对于我的4000个字符串和3个搜索词的列表,此解决方案的执行速度平均比执行数组_过滤器和多个grep快4倍。
array_filter($array, function($x) {
    return preg_match('/apple/', $x) && preg_match('/pear/', $x) && preg_match('/banana/', $x);
});