PHP parsing string into array with regex
I have a line like this:
$msg,array('goo','gle'),000,"face",'book',['twi'=>'ter','link'=>'edin']
I want to use preg_match_all to convert it to an array that might look like this:
array(
0 => $msg,
1 => array('goo','gle'),
2 => 000,
3 => "face",
4 => 'book',
5 => ['twi'=>'ter','link'=>'edin']
);
Note that all values are string .
I'm not very good at regex, so I just couldn't create a Template to do this. Multiple calls to preg will also be made.
+3
anwerj
source
to share
2 answers
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));
Sample program output :
Array
(
[0] => $msg,
[1] => array('goo','gle'),
[2] => 000,
[3] => "face",
[4] => 'book',
[5] => ['twi'=>'ter','link'=>'edin']
)
+4
Wiktor Stribiżew
source
to share
I know you asked for a regex solution, but today I am on eval()
:
eval('$array = array('.$string.');');
print_r($array);
Also note that it is 000
NOT a string and will be converted to 0
.
+2
AbraCadaver
source
to share