PHP preg_match_all () не захватывает подгруппы - PullRequest
1 голос
/ 15 ноября 2010

Я пытаюсь разобрать фид Twitter в Атоме, но сталкиваюсь с этой странной проблемой.Я звоню preg_match_all с этой строкой регулярного выражения:

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

Она соответствует всем записям в порядке, но захваченное название подгруппы / опубликованные не отображаются в результатах (нетв полученном объекте создаются массивы для захваченных подгрупп).

Теперь странная часть, я также пытаюсь захватить последний бит:

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

И теперь захват работает.Я получаю название, дату публикации и большую часть окончательных данных, которые мне не нужны.

Я пытался добавить не захватывающую строку "?:" В последнюю подгруппу, но затем перестал работать вообще, и перестал работать.

Итак, как мне получить нужные данные без необходимости перехватабольшой кусок нежелательных данных в конце?

1 Ответ

1 голос
/ 15 ноября 2010

Я рекомендую использовать 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;
...