我是PHP的初学者,我尝试使用preg_math_all来分割字符串。
我的字符串看起来像是:
[0, 5, 2, 1, true, COMMENT, 1][0, 27, 4, 1, true, COMMENT 2, 2]
该字符串可能包含[...]的几个部分。
所以,我尝试使用preg_match_all,就像那样:
preg_match_all('/\[\s*?(\d+), \s*?(\d+), \s*?(\d+), \s*?(\d+), \s*?(true|false), (\w+), \s*?(\d+)\]/i', $string, $matches, PREG_SET_ORDER);
但结果却不同意我的希望,你能不能帮我解决这个问题。
由于
答案 0 :(得分:2)
我会用这样的东西:
$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);
}
这将产生与上面相同的输出。
答案 1 :(得分:0)
首先使用正则表达式将其拆分为块:
preg_match_all('/\[(.*?)\]/i', $string, $matches);
然后使用explode()分割每个块:
$values = array();
foreach ($matches[1] as $block) {
$values[] = explode(',', $block);
}