我有XML:
<item id="232">
<id>1</id>
</item>
我做了类似的事情:
preg_match_all("/<item id=\"(.*)\">(.*?)<\/item>/",$content,$rss);
但由于某些原因,他并没有把所有的xml都只拿到第一个。
如何获取商品标签之间的内容?
感谢
答案 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中使用的其他修饰符。