PHP preg_match_all()没有捕获子组

时间:2010-11-15 19:17:02

标签: php regex preg-match-all

我正在尝试用PHP解析Twitter原子提要但遇到了这个奇怪的问题。我用这个正则表达式字符串调用preg_match_all

"|<entry>.*<title>(.*)</title>.*<published>(.*)</published>.*</entry>|xsU"

它匹配所有条目OK,但捕获的子组title / published不会显示在结果中(在结果对象中没有创建捕获的子组的数组)。

现在到了奇怪的部分,我也尝试捕获最后一点:

"|<entry>.*<title>(.*)</title>.*<published>(.*)</published>(.*)</entry>|xsU"

现在捕捉工作了。我得到了标题和发布日期以及我不想要的大量最终数据。

我尝试将非捕获字符串“?:”添加到最后一个子组,但随后捕获再次停止工作。

那么如何捕获我想要的数据,而不必在最后捕获大量不需要的数据?

1 个答案:

答案 0 :(得分:1)

我建议您使用DOM(或SimpleXML)来解析RSS / Atom供稿。与正则表达式相比,您将获得更好的结果。

这是一个例子(使用SimpleXML):

$rss_feed = file_get_contents('http://stackoverflow.com/feeds/question/4187945');
$sxml = new SimpleXMLElement($rss_feed);

$title = $sxml->entry[0]->title;
echo $title;