0

我有这样的格式化文本:

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" 想知道为什么+在这种情况下不起作用。那么我应该如何在这里形成我的模式呢?

4

2 回答 2

2

您在第一个之后没有匹配换行符。移动部分\n内部(?m:...)

于 2012-12-26T17:39:08.560 回答
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))
));

Record首先,它使用explodearray_filter将整个数据拆分为分隔符。然后对于每个块,它使用preg_match_all提取键值对并构造一个关联数组(通过array_combine)。

于 2012-12-26T17:47:19.863 回答