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

时间:2017-07-13 05:04:52

标签: php string-comparison string-matching

我想搜索两个或更多单词,但无法匹配确切的单词。

如果我使用其他功能,如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>';          
    }    
}

2 个答案:

答案 0 :(得分:1)

我想你想要这样: -

<?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

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

答案 1 :(得分:0)

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

代码:(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()的别名。