使用preg_match只获取字符串的一部分

时间:2015-03-19 04:36:59

标签: php string preg-match substring

我有一个名为

的数组
$array_fields = array(
'field_0_0_4_target_range',
'field_0_0_5_target_range_criteria', 
'field_0_0_6_target_range_count');

我想将其指定为

的输出
$key = array('target_range', 'target_range_criteria', 'target_range_count');

我尝试了这个,我得到了理想的结果:

foreach($array_fields as $field) {
   if(preg_match('/target_range/', $field)) {
      $key[] = substr($field,12); //hard coded
   }
}

这行代码"$key[] = substr($field,12)"的问题在于我可能有一个包含"field_0_0_10_target_range_value"的字段。 这将包含不良结果"_target_range_value"。如何确保我获得包含"target_range_*"的所有字段?

2 个答案:

答案 0 :(得分:1)

请尝试以下代码。

$array_fields = array(
'field_0_0_4_target_range',
'field_0_0_5_target_range_criteria', 
'field_0_0_6_target_range_count'
);

$new_fields = array();
foreach ($array_fields as $v){
  if(preg_match('/target_range.*/',$v,$matchs))
  {
     $new_fields[] = $matchs[0];
  }
}

print_r($new_fields);

答案 1 :(得分:0)

这应该适合你:

(这里我只用array_map()遍历每个数组元素,然后用target_range*抓取所有内容并返回它)

<?php

    $array_fields = [
            'field_0_0_4_target_range',
            'field_0_0_5_target_range_criteria', 
            'field_0_0_6_target_range_count'
        ];

    $array_fields = array_map(function($v){
        preg_match_all("/target_range.*/", $v, $matches);
        return $matches[0][0];
    }, $array_fields);


    print_r($array_fields);

?>

输出:

Array ( [0] => target_range [1] => target_range_criteria [2] => target_range_count )