IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec les regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    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.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Salut M

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #(?:<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 : Sélectionner tout - Visualiser dans une fenêtre à part
    (?:<img src=(?:.*)?alt=[\'"]?([^"]+)[\'"]?(?:.*)></a>)
    : Le cas d'une image avec un titre (avec un alt=)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?:<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

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci Koox,
    pour ton aide bon s.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les regex
    Par atchopba dans le forum Langage
    Réponses: 4
    Dernier message: 29/07/2013, 09h28
  2. Problème avec les regex
    Par fred33 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 05/10/2012, 12h07
  3. Problème de recherche avec les REGEX
    Par sampaiX dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 15/06/2010, 16h47
  4. problème avec les regex
    Par regisyves dans le forum ASP
    Réponses: 0
    Dernier message: 31/03/2010, 23h20
  5. REGEX problème avec les "
    Par storm_2000 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 30/11/2006, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo