【问题标题】:How to search for 2 or more matches in a single string?如何在单个字符串中搜索 2 个或多个匹配项?
【发布时间】:2017-12-17 17:08:52
【问题描述】:

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

如果我使用 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>';          
    }    
}

【问题讨论】:

  • 请尝试详细说明您实际想要什么。根据此输入数据,您想要的结果是什么。请说清楚,否则没人能回答。
  • 如果数组中有两个确切的单词..i 应该得到找到的输出。但没有一个词匹配,例如 xyz india 不应该匹配
  • Yabes Nadar 请在下面检查我的答案,并用所有可能的案例对其进行测试,如果它适用于所有案例,则将其标记+投票作为可接受的答案。谢谢
  • 您将参数放错了 preg_match_all 函数。第一个是正则表达式(您将$string 放入模式中),然后是输入(您有$value),第三个是结果数组var。可能还有更多,但这些是最重要的。如果您有$string = "abc,india ltd";,则接受的解决方案将不起作用。

标签: php string-comparison string-matching


【解决方案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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多