Preg_match_all

Signaler
Messages postés
27
Date d'inscription
vendredi 7 novembre 2008
Statut
Membre
Dernière intervention
13 mars 2012
-
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009
-
Bonjour,
Je voulais utiliser un preg_match_all pour recuperer tous les liens sur une page web. Ensuite j'affiche le resultat et je me rend compte que qd sur une ligne il y a plusieurs liens il recupere que le dernier.
Auriez-vous un moyen pr tout recuperer ?

Merci

5 réponses

Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

Bonjour,

Peut-on voir la ligne de code ? (avec l'exp. rég. bien sur).

Normalement, le 'switch' /g (si je ne suis pas trop rouillé en expression régulière :X) impose au moteur d'expression de trouver tous les résultats possible.

Cordialement,
tropnul
Messages postés
27
Date d'inscription
vendredi 7 novembre 2008
Statut
Membre
Dernière intervention
13 mars 2012

oui bien sur !

voici l'expression reguliere que j'utilise :
preg_match_all('#<a\b.*href=["|\']?([^(\#|"|\')].*?)["|\']#i', $page, $matches);
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

essayes avec celle-ci :

preg_match_all('/href="([^"].+?)"/ig', $page, $matches);

Cordialement,
tropnul
Messages postés
27
Date d'inscription
vendredi 7 novembre 2008
Statut
Membre
Dernière intervention
13 mars 2012

Merci TropNul pr ton aide, ca marche !
Par contre j'ai du enlever le g a la fin parce qu'il me le prenait pas.
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

De rien :)

Au temps pour moi pour le /g. C'est surement la fonction preg_match_all qui gère seule celà.

Je tiens tout de même à préciser le problème de ta première expression. (dans un but pédagogique pour les lecteurs)

Tu mettais des OU dans une CLASSE qui par défaut contient des OU. En règle générale, lorsqu'on utilise une CLASSE dans une expression régulière, à savoir des [ ], il n'est nullement nécessaire d'inclure les séparateurs "|".  Donc ["|\']? devient ["\']?, [^(\#|"|\')].*? devient [^\#"\'].*? et ["|\'] devient ["\'].

Cordialement,
tropnul