查找并识别字符串中存在的数组中的哪些元素

时间:2015-04-01 19:04:26

标签: php regex

我有一个阵列让我们说它看起来像这样:

$arr=array('aa','bb','cc');

现在让我们说我有一个看起来像这些字符串的字符串:

$str='bb';
$str='A_STRING_bb_WITH_SOME_TEXT';
$str='ASTRINGbbWITHSOMETEXT';
$str='A+STRING+bb+WITH+SOME+TEXT';
$str='A STRING bb WITH SOME TEXT';

我想要一个能给我的功能:

$r=find_which_one($arr,$str);

$r应该是" bb"对于所有这些。最好的方法是什么?

4 个答案:

答案 0 :(得分:1)

$arr=array('aa','bb','cc');
$str='A_STRING_bb_WITH_SOME_TEXT aa';


function find_which_one(array $arr,$str) {
    $r = preg_match(
        '/((' . implode(')|(', $arr) .'))/',
        $str,
        $matches
    );
    return ($r !== false) ? $matches[0] : $r;
}

$r=find_which_one($arr,$str);
var_dump($r);

如果未找到则返回false,否则返回首先发生的$ arr中的值

答案 1 :(得分:1)

这样的事情:

function find_which_one($arr,$str){
  foreach($arr AS $needle){
    if (strpos($str, $needle)){
      return true; //returns true on the first match
    }
  }
  return false
}

答案 2 :(得分:0)

这将返回正确的key。如果找不到,它将返回false

function find_which_one($keys,$value) {
  foreach($keys as $key) if (strpos($value, $key)) return $key;
  return false;
}

答案 3 :(得分:0)

使用array_filter直截了当:

$arr = array('aa','bb','cc');
$str = 'A+STRING+bb+WITH+SOME+TEXT';

print_r ( array_filter($arr, function($k) use($str) { 
                 return strpos($str, $k) !== FALSE; }) );
Array
(
    [1] => bb
)

否则:

$str = 'ASTRINGbbWITHSOMETEXT';
print_r ( array_filter($arr, function($k) use($str) { 
                 return strpos($str, $k) !== FALSE; }) );
Array
(
    [1] => bb
)