2012-09-18 3 views
2

Вот регулярное выражение, которое я мощеные до:PCRE/PHP регулярное выражение не соответствует последний «элемент»

/(.*={76}\s)?\s*(.*?)\s\-\-\s(\d{2}\/\d{2}\-\d{2}\s\d{2}:\d{2})\s\s(.*?)\s(http:\/\/service.*?)\s(\-{76})/is 

и вот текст я буду разборе: http://p.linode.com/7015

и вот замена для Найденный текст:

<item>\n\t<title>$2</title>\n\t<pubDate>$pubDate</pubDate>\n\t<description>$4</description>\n\t<link>$5</link>\n</item>\n\n 

и, наконец, вот вывод, который я получаю: http://p.linode.com/7016

У меня есть почти Придумайте регулярное выражение, необходимое для разбора блока текста в RSS 2.0 XML-разметку. Я тестировал его с помощью RegExr и RegexBuddy, и он отлично работает , за исключением для последнего «элемента», где нет разрывов строк после ссылки (Line 269).

Короче говоря, проблема в статье «iProperty» в тексте не соответствует.

Любые гуру регулярных выражений, желающие помочь мне разобраться, что случилось?

ответ

1

Я стараюсь, и я думаю, что у меня есть решение (я могу генерировать правильный выходной файл с ним), просто измените регулярное выражение как это:

/(.*={76}\s)?\s*(.*?)\s\-\-\s(\d{2}\/\d{2}\-\d{2}\s\d{2}:\d{2})\s\s(.*?)\s(http:\/\/service.*?)(\s(\-{76})|$)/is 

Я только добавил |$ в конце и некоторые () для оператора OR.

+0

Спасибо. Это сделал трюк. Очень признателен. – superbarney