2012-09-18 3 views
2

est ici une expression régulière que j'ai bricolé jusqu'à:PCRE/PHP regex ne correspond pas à la dernière « item »

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

et voici le texte que je vais analyse syntaxique: http://p.linode.com/7015

et est ici le remplacement du texte correspondant:

<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 

et enfin, voici la sortie que je reçois: http://p.linode.com/7016

J'ai presque venir avec une regex nécessaire pour analyser un bloc de texte en balisage XML RSS 2.0. Je l'ai testé avec RegExr et RegexBuddy et cela fonctionne parfaitement sauf pour le dernier "article" où il n'y a pas de sauts de ligne après le lien (Line 269).

En bref, le problème est l'article "iPropriété" dans le texte ne correspond pas.

Les gourous regex prêts à m'aider à résoudre les problèmes?

Répondre

1

Je l'ai essayé et je pense que j'ai la solution (je peux générer le fichier de sortie correct avec elle), juste modifier votre regex comme ceci:

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

Je viens d'ajouter le |$ à la fin et certains () pour l'instruction OR.

+0

Merci. Cela a fait l'affaire. Très appréciée. – superbarney