Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/07/2006, 15h05   #1
Invité de passage
 
Inscription : juin 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 13
Points : 1
Points : 1
Par défaut Problème avec les regex

Bonjour,

Je cherche à récupérer tous les liens (href et les titres ) d’un texte HTML
Pour faire ça j’ai un regex :
Code :
1
2
 
preg_match_all('/<a.*?(?: |\\t|\\r|\\n)?href=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>(.+?)<\/a.*?>/sim', $page, $match, PREG_SET_ORDER);
qui me permet de récupérer tous les liens et leur titres:
ex : <a href="monsite.htm">Monsite</a>
J’obtiens monsite.htm et Monsite

Ma question c’est lorsque j’ai une balise de cette forme :

<a href="monsite.htm"><img src=”images/logos” alt=”Monsite”></a>

Comment je peux récupérer la valeur de l’attribut alt (Monsite).
Avec mon regex j’arrive à récupérer monsite.htm mais pour le titre il m’affiche l’image.

Comment je peux récupérer que le titre de l’image ?
Merci.
dragon noir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2006, 18h12   #2
Membre chevronné
 
Inscription : juillet 2002
Messages : 842
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 842
Points : 647
Points : 647
Votre expression régulière est beaucoup trop compliquée. +? et *? c'est un peu absurde non ? Vous pouvez utiliser \s pour signifier \n ou \r ou espace ou \t. En divisant la taille de l'expression régulière par quatre elle sera plus lisible par vous d'abord, et par ceux qui lisent votre question. (important pour avoir une réponse)

En ce qui concerne la question, vous pouvez rajouter un grand "ou". Soit on peut trouver <img alt= et on capture l'attribut alt, soit on ne peut pas et on capture tout ce qu'il y a jusqu'à </img>

Il me semble que vous devriez inverser la tendance à la gourmandise (option U) pour que tout fonctionne bien même quand il y'a deux liens à détecter.
Blustuff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2006, 17h23   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2003
Messages : 24
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 24
Points : 12
Points : 12
Salut M

Code :
#(?:<a.*?(?: |\\t|\\r|\\n)?href=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>)(?:(?:<img src=(?:.*)?alt=[\'"]?([^"]+)[\'"]?(?:.*)></a>)|(?:(.*)(?<!\>)</a>)|(?:<img src=[\'"]?([^">]+)[\'"]?(?:.*)></a>))#
La premiere partie de ton expression régulière je n'y ai pas touché, elle récupère correctement les liens des pages (même si je la trouve très compliquée !)
La 2e partie doit récupérer les titres des images ou des liens, elle est divisée en 3 parties reliées par des OU ( | ) :

Code :
(?:<img src=(?:.*)?alt=[\'"]?([^"]+)[\'"]?(?:.*)></a>)
: Le cas d'une image avec un titre (avec un alt=)
Code :
(?:<img src=[\'"]?([^">]+)[\'"]?(?:.*)></a>)
: Le cas d'une image sans titre (sans alt=)
: Pour les liens normaux, sans image

C'est pas forcément optimisé, mais ca marche

Bon we
KooX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2006, 11h26   #4
Invité de passage
 
Inscription : juin 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 13
Points : 1
Points : 1
Merci Koox,
pour ton aide bon s.
dragon noir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h20.


 
 
 
 
Partenaires

Hébergement Web