简体   繁体   中英

PHP parsing string to array with regular expressions

I have a string like this:

$msg,array('goo','gle'),000,"face",'book',['twi'=>'ter','link'=>'edin']

I want to use preg_match_all to convert this to an array that could look like this:

array(
     0 => $msg,
     1 => array('goo','gle'),
     2 => 000,
     3 => "face",
     4 => 'book',
     5 => ['twi'=>'ter','link'=>'edin']
);

Note that all the values are string .

I am not very good at regular expressions, so I have just been unable to create a Pattern for this. Multiple preg calls will also do.

I suggest using preg_split with the following regex:

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

Output of the sample program :

Array
(
    [0] => $msg,
    [1] => array('goo','gle'),
    [2] => 000,
    [3] => "face",
    [4] => 'book',
    [5] => ['twi'=>'ter','link'=>'edin']
)

I know you asked for a regular expression solution, however I'm on an eval() kick today:

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

print_r($array);

Also note that 000 is NOT a string and will be converted to 0 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM