PHP正则表达式匹配字符串中的多个标记并添加到数组中

时间:2016-12-02 15:55:29

标签: php arrays regex

我有一个包含多个标签的字符串:

<item>foo bar</item> <item>foo bar</item>

我需要匹配其中的每一个并且它们可以在新行上并将它们添加到数组中,但它似乎无法匹配它们,我是正则表达式的新手所以我不明白出了什么问题,解释会很棒,谢谢!

preg_match_all('/<item>(.*)<\/item>/',$content,$matches);

目前,它在matches数组中返回两个空索引。

我也尝试过:

<item>([\s\S]*)<\/item>

这匹配从第一个标签到最后一个标签,因此基本上抓住了一切。

1 个答案:

答案 0 :(得分:1)

您可以使用此

preg_match_all('/<item>(.*?)<\/item>/',$content,$matches);

结果

 Array
 (
    [0] => Array
    (
        [0] => <item>foo bar</item>
        [1] => <item>foo bar</item>
    )

[1] => Array
    (
        [0] => foo bar
        [1] => foo bar
    )

)

我只将?添加到正则表达式中,查找最接近的匹配并获取它。

在这里阅读懒惰和贪婪:What do lazy and greedy mean in the context of regular expressions?