如何在单个字符串中搜索 2 个或多个匹配项?

How to search for 2 or more matches in a single string?

我想搜索两个或更多的词,但找不到准确的词。

如果我使用 stripos() 等其他函数,我无法获得所需的输出。

$string = "abc india ltd";
$Arr = array('xyz ab','abc india', 'pqr', 'yz lmn');
$Arr = implode('',$Arr);
if (preg_match_all("/$string/", $Arr)) {   
     echo '<b>'.'found'.'<font color="green">'.$string.'</font>'.'</b>';          
}

或(两者相同,但要避免在循环内使用)

$string = "abc india ltd";
$Arr = array('xyz ab','abc india', 'pqr', 'yz lmn');   
foreach ($Arr as $value) {
    if (preg_match_all("/$string/", $value)) {   
        echo '<b>'.'found '.'<font color="green">'.$string.'</font>'.'</b>';          
    }    
}

我想你想要这样:-

<?php

$string = "abc india";

$Arr = array('xyz india','abc india', 'pqr', 'yz lmn',"xyz abc india");

foreach($Arr as $val){
 $explode_string = explode(" ",$string);
 $counter =0;
 foreach($explode_string as $explode_str){
     if(strpos($val,$explode_str) !== FALSE){
        $counter +=1;
     }
 }
 if($counter>=2){
   echo $val. " have exact ".$counter. " word matches";
   echo PHP_EOL;
 }
}

输出:-https://eval.in/831808

注意:- 用所有可能的测试用例检查它,让我们知道,是否有效?

这利用一些智能数组函数来保持代码块简洁并避免手动递增计数器:

代码:(Demo)

$input_string="abc india ltd";
$input_array=explode(' ',$input_string);
$search_array=array('xyz ab','abc india','ltd abc','yz lmn');
foreach($search_array as $search_string){
    if(sizeof(array_intersect($input_array,explode(' ',$search_string)))>1){  
        echo "More than one word in $search_string was found in $input_string\n";
    }
}

输出:

More than one word in abc india was found in abc india ltd
More than one word in ltd abc was found in abc india ltd

*注意,array_intersect() 生成一个新数组,该数组仅包含两个提供的数组中存在的元素。 sizeof()count() 的别名。