我有一个这样的字符串:
$msg,array('goo','gle'),000,"face",'book',['twi'=>'ter','link'=>'edin']
我想使用 preg_match_all 将其转换为可能如下所示的数组:
array(
0 => $msg,
1 => array('goo','gle'),
2 => 000,
3 => "face",
4 => 'book',
5 => ['twi'=>'ter','link'=>'edin']
);
请注意,所有值均为字符串。
我不太擅长正则表达式,所以我无法为此创建模式。多个preg调用也可以。
答案 0 :(得分:4)
我建议将preg_split
与以下正则表达式一起使用:
$re = "/([a-z]*(?:\\[[^]]*\\]|\\([^()]*\\)),?)|(?<=,)/";
$str = "\$msg,array('goo','gle'),000,\"face\",'book',['twi'=>'ter','link'=>'edin']";
print_r(preg_split($re, $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
Array
(
[0] => $msg,
[1] => array('goo','gle'),
[2] => 000,
[3] => "face",
[4] => 'book',
[5] => ['twi'=>'ter','link'=>'edin']
)
答案 1 :(得分:2)
我知道你要求一个正则表达式解决方案,但我今天正在eval()
踢:
eval('$array = array('.$string.');');
print_r($array);
另请注意,000
不是字符串,会转换为0
。