正则表达式匹配PHP中的格式化文本

时间:2012-12-26 17:34:16

标签: php regex

我格式化了这样的文字:

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

will do it

$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))
));

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