我格式化了这样的文字:
Record
name=aaa
age=16
info=blabla bla
Record
name=bbb
age=15
info=foo bar foo bar
想在PHP中使用正则表达式将其转换为数组。到目前为止,我已经尝试过:
preg_match_all("/Record.*\n(?m:^(.+)=(.+)$)+/",$text,$matches);
但它只捕获"Record name=aaa"
和"Record name=bbb"
想知道为什么+
在这种情况下不起作用。那我该如何在这里形成我的模式?
答案 0 :(得分:2)
第一个之后你没有匹配换行符。移动\n
部分内的(?m:...)
答案 1 :(得分:1)
$data = array_values(array_map(
function($e){
preg_match_all('/(.*?)=([^\r\n]*)/', $e, $m);
return array_combine($m[1], $m[2]);
},
array_filter(explode("Record", $text))
));
首先,它使用explode和array_filter将整个数据按Record
分隔为分隔符。然后,对于每个块,它使用preg_match_all提取键值对,并构造一个关联数组(array_combine)。