PHP - identification d'url

Gill's
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 3 Jan 2006

PHP - identification d'url

Message le Ven Aoû 24, 2007 21:54

Le code dans lequel je cherche mon expression est du type :

<h2 class=classe1><a href="http://www.site.com/gabarit.php?cat=cat1&f=3">ma page</a></h2><h2 class=classe1><a href="http://www.site.com/gabarit.php?cat=cat1&f=2">ma page 2</a></h2> etc...

Comme vous le voyez, le code n'est pas formaté ligne par ligne, tout se suit.

Je voudrais pouvoir identifier chaque url :

<a href="http://www.site.com/gabarit.php?cat=cat1&f=3">ma page</a>

Comment je fais pour que mon identification s'arete a chaque balise </a> pour pouvoir ensuite afficher toutes les chaines trouvées ?

j'ai fais ca mais ca ne marche pas :

preg_match_all('/\<a href="(.*)(www.site.com)+(.*?)(<\/a>)+/Ui',$file_contents,$out);

la chaine semble ne pas s'areter a chaque </a> trouvé, mais plutot au tout dernier </a> trouvé dans l'ensemble du code.

comment faire ?

Merci !

Didier_S
WRInaute impliqué
WRInaute impliqué
 
Messages: 567
Inscription: 24 Aoû 2004

Message le Sam Aoû 25, 2007 10:09

essaie avec (.*?) à la place de (.*)
(merci ecocentric)

Gill's
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 3 Jan 2006

Message le Sam Aoû 25, 2007 10:52

j'ai testé, mais ca ne fonctionne toujours pas :

preg_match_all('/\<a href="(.*?)(www.site.com)+(.*?)(<\/a>)+/Ui',$file_contents,$out);


L'identification va toujours jusqu'au dernier </a> trouvé dans tout le code, pas le premier rencontré après "www.site.com".

Hors je voudrais pouvoir identifier chaque lien, 1 par 1.

A+


Leonick
WRInaute accro
WRInaute accro
 
Messages: 18812
Inscription: 8 Aoû 2004

Message le Sam Aoû 25, 2007 14:03

heu, pourquoi *? ça fait doublon, non ?
il faut plutôt remplacer (.*) par ([^>]*) et ça fonctionnera


sunflower
WRInaute discret
WRInaute discret
 
Messages: 121
Inscription: 5 Jan 2006

Message le Sam Aoû 25, 2007 14:58

Gill's a écrit:preg_match_all('/\<a href="(.*?)(www.site.com)+(.*?)(<\/a>)+/Ui',$file_contents,$out);


L'identification va toujours jusqu'au dernier </a> trouvé dans tout le code, pas le premier rencontré après "www.site.com".

Hors je voudrais pouvoir identifier chaque lien, 1 par 1.


Plutôt une regexp comme ça?

'(<a href="(https?)://www.site.com([^"]*)[^<]*</a>)'

matche pas les sous-domaines de :www.site.com ni les liens relatifs (et que le protocole http|https)

Les backreferences devraient te donner le mode http|https, la query string, et la balise entière de <a> à </a>

Bon courage avec les regexp ;)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités