将格式化字符串拆分为关联数组的正则表达式


regular expression to split formatted string into associative array

我有一个字符串,看起来像:

KEY1,"Value"KEY2,"Value"Key3,"Value"

这个字符串的键/值的数量总是变化的,我需要一个关联数组:

array (
    'KEY1' => 'Value',
    'KEY2' => 'Value',
    'KEY3' => 'Value'
);

包含在字符串中的数据,正则表达式将是最好的我想?

假设您的值中不包含",您可以这样做:

$str    = 'KEY1,"Value1"KEY2,"Value2"Key3,"Value3"';
$pieces = preg_split('/(?<=[^,]")/',$str,-1,PREG_SPLIT_NO_EMPTY);
$result = array();
foreach($pieces as $piece) {
        list($k,$v) = explode(",",trim$piece);
        $result[$k] = trim($v,'"');
}

看它在行动!

php> $str = 'KEY1,"Value"KEY2,"Value"Key3,"Value"';
php> $hash = array();
php> preg_match_all("/(.*?),'"(.*?)'"/", $str, $m);
php> foreach($m[1] as $index => $key) {
 ... $hash[$key] = $m[2][$index];
 ... }
php> var_dump($hash);
array(3) {
  ["KEY1"]=>
  string(5) "Value"
  ["KEY2"]=>
  string(5) "Value"
  ["Key3"]=>
  string(5) "Value"
}

如果键在值之间改变,则需要preg_split()。如果钥匙总是相同的,那么使用explosion()就绰绰有余了。