Preg_match_all

shefiu Messages postés 27 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 13 mars 2012 - 8 avril 2009 à 12:00
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009 - 8 avril 2009 à 16:43
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

cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
8 avril 2009 à 13:46
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
shefiu Messages postés 27 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 13 mars 2012
8 avril 2009 à 13:52
oui bien sur !

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

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

Cordialement,
tropnul
shefiu Messages postés 27 Date d'inscription vendredi 7 novembre 2008 Statut Membre Dernière intervention 13 mars 2012
8 avril 2009 à 14:22
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.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
8 avril 2009 à 16:43
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
Rejoignez-nous