FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » PHP -> détection balises HTML avec les REGEX
 

PHP -> détection balises HTML avec les REGEX

Il y a 307 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : PHP -> détection balises HTML avec les REGEX
 
Plus d'informations

Salut à tous, :sol:  
 
Le but de mon script PHP est (dans un premier temps) d'extraire tous les "href" de toutes les balises <a></a> d'une page HTML quelconque.
Pour cela j'ai écrit ce motif regex :
 
$masque="<a([^>]*)>([^<]*)</a>";
 
en faisant comme ça je récupère quasiment tous les <a> mais certains résistent !!
 
Par exemple celui-la :  
<a href="http://truc.bidule"><b>truc.bidule</b></a>
 
Je vois bien ou est le probleme, mais je ne vois vraiment pas de solution car si je fais ça :
 
$masque="<a([^>]*)>(.*)</a>";
 
ce n'est pas satisfaisant non plus...
 
Bon voila, j'espère que j'ai été assez clair et je remercie d'avance toute personne bien intentionnée qui daignera répondre à ma question
 

Profil : Pointeur
Plus d'informations

et ca ? (c'est fait a l'arrache donc...)
 

Code :
  1. $mask = "`<a.*href=[\"|\'](^[\"|\']*)[\"|\'].*>(.*)</a>`";


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

C'est vraiment sympa de ta part de m'aider mais là ça a pas l'air de faire l'affaire...
Le problème c'est que la plupart des pages sur le web ne sont pas valides W3C et de ce fait il arrive qu'il n'y ai pas de " ou de ' autour du href et dans ce cas là : ça marche pas !
Mais de toute façon mon problème se situe juste avant : </a> ...
Toi tu mets (.*) mais si je mets ça : ça déconne ! Je suis obligé de faire un truc du genre ([^<]*), le prob c que si il y a des balises dedans ça déconne aussi  :(  
En tous cas merci pour ta réponse ça fait plaisir  :bounce:

Profil : Pointeur
Plus d'informations

bin si tu veux juste le href, si il y a des balises dedans, tu t'en fou !


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

ben non m'en fout pas, parceque si il y a des balises dans le <a>, il n'est meme pas detecté lors de la recherche, il passe à travers le masque quoi...

Profil : Pointeur
Plus d'informations

tu veux pas recupérer la balise inclue ??


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

Si justement mais meme si je voulais pas la récupérer ça change quoi ?

Profil : Pointeur
Plus d'informations

bha  

Code :
  1. $masque="<a([^>]*)>(.*)</a>";


 
ca devrait aller...


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Faut jamais hesiter !
Plus d'informations

Yo !  ;)  
 
matadore j'ai le même problème que toi mais j'ai toujours pas trouvé de solution !
Sinon KangOl ton motif peut poser problème car si on a :
 
<a href="http://truc.bidule"><b>truc.bidule</b></a>blabla<a href="http://bidule.chouette"><b>bidule.chouette</b></a>
 
Il pourrait considerer :
<a $1>$2</a>
 
Avec $2 = <b>truc.bidule</b></a>blabla<a href="http://bidule.chouette"><b>bidule.chouette</b>
 
Je continue de chercher puis si je trouve je vous fais signe ^^
 
Au debut j'étais tenter de faire :

Code :
  1. $masque="<a([^>]*)>[^</a>]*</a>";


 
Mais je ne sais pas comment on exclue un groupe de caractères :P

pourquoi faire cent fois la même chose ?
Plus d'informations

Code :
  1. $masque="<a([^>]*)>(.*?)</a>";


 
le ? à coté de * fait que .* est recherché en mode non-gourmand (ungreedy) et qu'il va prendre le moins de charactères possibles ...


Message édité par Batchy le 01-09-2005 à 08:14:20

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » PHP -> détection balises HTML avec les REGEX
 

Annonces Google
Publicité