获取标签之间的所有数字 - 正则表达式

时间:2011-08-13 17:34:52

标签: php regex

我有XML:

<item id="232">
 <id>1</id>
</item>

我做了类似的事情:

preg_match_all("/<item id=\"(.*)\">(.*?)<\/item>/",$content,$rss);

但由于某些原因,他并没有把所有的xml都只拿到第一个。

如何获取商品标签之间的内容?

感谢

2 个答案:

答案 0 :(得分:0)

如果您对实际解析/验证XML结构不感兴趣,请不要打扰匹配关闭标记:

preg_match_all("/<item id=\"(.*)\">/",$content,$rss);

如果你需要确保标签是平衡的,正则表达式不是正确的工具。使用XML解析器。

答案 1 :(得分:0)

$content = '<item id="232">
 <id>1</id>
</item><item id="34">
 <id>23</id>
</item><item id="2234">
 <id>2342</id>
</item>';

preg_match_all('#<item id="(.*?)">(.*?)</item>#s', $content, $rss, PREG_PATTERN_ORDER);

$rss[1]将包含id="..."内的所有匹配,而$rss[2]将包含<item>...</item>内的所有匹配。

这里重要的是s修饰符,它将匹配任何字符,包括新行。请阅读PCRE Pattern Modifiers以获取有关此修饰符的说明以及PHP中使用的其他修饰符。