使用正则表达式将PHP字符串解析为数组

3

我有一个像这样的字符串:

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

请注意,所有的值都是字符串。我并不擅长正则表达式,所以我无法为此创建一个Pattern。多个preg调用也可以。

好的,我已经回答了,但是['twi'=>'ter','link'=>'edin']和其他的是字符串还是应该定义为实际的数组? - AbraCadaver
不,它们全部都应该作为字符串。 - anwerj
2个回答

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
这太棒了!你能推荐一些学习那种级别的正则表达式的东西吗? - anwerj
3
这个水平可以在一定的时间内达到......我使用正则表达式大约有6年了,但说实话,在StackOverflow上的这里学到了更多,大概是在3个月内。订阅regex标签,留意高赞问题接受的回答,查看由“gurus”(声望很高的用户)标记的收藏问题......这个正则表达式部分是我在http://www.rexegg.com/阅读有关正则表达式的内容,并且还要感谢@anubhava的回答。 - Wiktor Stribiżew

2

我知道你要求一个正则表达式的解决方案,但是今天我对eval()很感兴趣:

eval('$array = array('.$string.');');

print_r($array);

请注意,000不是字符串,并将转换为0


2
今天似乎你有一个“邪恶()”的一天? - Rizier123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接