我会使用这样的东西:
$string = '[0, 5, 2, 1, true, COMMENT, 1][0, 27, 4, 1, true, COMMENT 2, 2]';
preg_match_all( '#\[([^\]]+)\]#', $string, $matches);
$result = array();
foreach( $matches[1] as $match) {
$result[] = array_map( 'trim', explode( ',', $match));
}
var_dump( $result);
与其尝试单独匹配每个组件,只需匹配方括号中的所有内容,然后进行一些额外的解析以将所有内容放在其自己的数组元素中。
输出:
array(2) {
[0]=>
array(7) {
[0]=>
string(1) "0"
[1]=>
string(1) "5"
[2]=>
string(1) "2"
[3]=>
string(1) "1"
[4]=>
string(4) "true"
[5]=>
string(7) "COMMENT"
[6]=>
string(1) "1"
}
[1]=>
array(7) {
[0]=>
string(1) "0"
[1]=>
string(2) "27"
[2]=>
string(1) "4"
[3]=>
string(1) "1"
[4]=>
string(4) "true"
[5]=>
string(9) "COMMENT 2"
[6]=>
string(1) "2"
}
}
演示
或者,您可以使用explode
并进行更多处理,如下所示:
$pieces = explode( ']', $string);
array_pop( $pieces); // There is one extra empty element at the end
$result = array();
foreach( $pieces as $piece) {
$parts = explode( ',', $piece);
$parts[0] = trim( $parts[0], '[');
$result[] = array_map( 'trim', $parts);
}
这将产生与上述相同的输出。