simili parser sur du html avec des regexp

simili parser sur du html avec des regexp - PHP - Programmation

Marsh Posté le 02-02-2005 à 11:40:50    

Bonjour,
 
J'essaie d'extraire le texte d'une page html en fonction des balises avec les expressions régulieres.
 
Exemple d'essai d'extraction du titre:
 
$html="<div class="titre"> LE TITRE</div>
       <div class="auteur">L'AUTEUR</div>
       <div class="texte"> LE TEXTE</div>";
 
eregi("<div class=\"titre\">[a-zA-Z\-\.\']*</div>", $html, $res);
$item=ereg_replace("<div class=\"toc-title\">",'',$res[0]);
$item=ereg_replace("</div>",'',$item);
 
Le probleme c'est que ca marche pas du tout, j'ai l'impression que le probleme vient du fait qu'il y ai plusieurs </div> mais c'est peut etre pas du tout ca!

Reply

Marsh Posté le 02-02-2005 à 11:40:50   

Reply

Marsh Posté le 02-02-2005 à 11:42:05    

Si la page est valide XHTML, tu peux utiliser des fonctions DOM XML qui sont 25 fois plus simples :)

Reply

Marsh Posté le 02-02-2005 à 11:51:19    

Mais comment on fait pour obtenir du xhtml ou xml a partir d'une page html?
 
En fait j'essai sur sachant que j'ai choisit de voir les resultats avec "toto" http://www.ncbi.nlm.nih.gov/entrez [...] levance=on

Reply

Marsh Posté le 02-02-2005 à 11:54:14    

Ben l'html, ça fait longtemps qu'il ne faudrait plus l'utiliser. Maintenant, tout doit être fait en XHTML valide, pour bénéficier des outils XML... Maintenant le site que tu donnes ne respecte pas ça, du coup il faut que tu t'amuses avec des regexp :cry:

Reply

Marsh Posté le 02-02-2005 à 11:59:00    

Bah tu t'y connais un peu en reg exp? Parce que perso je ne vois pas ce qu'il y de mauvais dans mon expression. Je crois que je vais réinventer la roue en faisant ma fonction de A à Z... snif ...snif

Reply

Marsh Posté le 02-02-2005 à 12:00:30    

ctnul a écrit :


$html="<div class="titre"> LE TITRE</div>
       <div class="auteur">L'AUTEUR</div>
       <div class="texte"> LE TEXTE</div>";
 
eregi("<div class=\"titre\">[a-zA-Z\-\.\']*</div>", $html, $res);
$item=ereg_replace("<div class=\"toc-title\">",'',$res[0]);
$item=ereg_replace("</div>",'',$item);


utilise plutôt preg_replace qui est plus rapide et plus complet, voici un exemple :

Code :
  1. if (preg_match("#<div class=\"titre\">([^<]*)</div>#i", $html, $match))
  2.   $titre = $match[1];


Reply

Marsh Posté le 02-02-2005 à 12:10:02    

Waouh!! c'est beau une reg exp qui marche :)
Merci de ne pas me faire réinventer la roue.
 
Par contre en décrypté c'est quoi le # et #i?  
 

Reply

Marsh Posté le 02-02-2005 à 12:30:12    

ctnul a écrit :

Par contre en décrypté c'est quoi le # et #i?


# c'est un délimiteur de masque (tu peux utiliser aussi / ou autres) et i c'est pour l'option 'insensible à la casse'.

Reply

Marsh Posté le 02-02-2005 à 14:13:28    

Parfait avec ca , la doc et un bon petit repas je vais m'amuser toute l'après midi.
 
Merci et bon ap,
C.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed