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


get only part of string using preg_match

我有一个名为的数组

$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_*"的所有字段?

请尝试以下代码。

$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);

这应该适用于您:

(这里我只是用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 )