Regex pour extraire du code entre 2 balises

Signaler
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
-
cs_PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
-
bonjour,

ça fait quelques heures que je cherche, je trouve pas comment faire,
je voudrais extraire du texte d'une page html, ce texte est compris entre 2 balises <tr ...> et </tr>
je n'arrive pas et je me pause une question en plus,
les expressions régulières de ce type sont faites pour fonctionner sur une ligne, donc si il y a des retours à la ligne, et bien comment ça se passe.
parce que si je veux extraire un bloc de données contenant des retours à la ligne, des vrais "\n", pas des
, et ben il faut tester sur plusieurs ligne, mais justement, je crois que ça le fait pas les regex.
Je pense qu'il faudrait déjà linéariser tout sur une seule ligne, non ???

merci

3 réponses

Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,
Tu essaye d'extraire les valeurs dans les balises (genre : "<tr class="css">") ou ce que contenus (genre "<tr>Contenu</tr>) ?

For every choice, a consequence (Fable)
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
3
Hi,

PHP gère bien le multiligne dans ses regex, aucun souci.
Donc tu passes dans une seule variable chaine ce que tu veux traiter, en effet, mais ensuite plus aucun souci PHP se débrouille.

Tu peux utiliser un pattern du type :

"!<tr( [^>]+)?>(.*)</tr>!Ui"

L'option "U" va chercher à raccourcir au maximum le matching, ca rend le "*" non gourmand, pour éviter de chopper plusieurs blocs <tr>...</tr> dans ton retour.
L'option "i" c'est juste pour que ce soit insensible a la casse (possibilité d'avoir </TR> par exemple)

Code final :

PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
3
Oups. Oublié le code final:

if (preg_match("!<tr( [^>]+)?>(.*)</tr>!Ui",$tontext,$matches)) {
    echo "Il y a bien des blocs TR !";
    print_r($matches);
}

PaDa