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 :

Capture de lien [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 12
    Par défaut Capture de lien
    Bonjour ,

    Je bute sur une regex et je n'arrive pas à continuer mon boulot sans elle, alors après quelques recherches infructueuses je me permet de vous solliciter pour trouver mon bonheur :p.

    En bref à partir du code HTML d'une page je souhaite obtenir un lien qui contient un mot clé et capturer différentes partie de ce lien, exemple (ici le mot clé sera "contact") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="presse/nous-contacter/"  >Nous contacter</a>
    Ici j'aimerais tout d'abord trouver ce lien et capturer '<a href="' , 'presse/nous-contacter/' , et '" >Nous contacter</a>', jusque la pas de problème j'y parviens grâce à cette regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (<a [^>]*href=["']{1})([^"']*)(["']{1}[^>]*>[^<]*?contact[^<]*?</a>)
    Je n'avais pas réfléchi à un cas qui pourrait se présenter, parfois le lien est de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a ...><strong>*contact*</strong></a>
    et dans ce cas la... ma regex ne capture pas puisque j'utilisais [^<]* pour ne pas avoir plusieurs liens capturés en même temps.

    Ce que je cherche à faire c'est capturer un lien peu importe ce qu'il y a comme balises (sauf </a> balise fermante du lien..) entre <a> et </a> , mais je n'y parviens pas si je vire les [^<]* de chaque coté de contact je me retrouve avec des matchs de plusieurs liens, et je ne sais pas comment faire pour dire "n'importe quel caractère tant qu'il n'y a pas cette chaine (</a>).

    Un petit coup de main ne serait pas de refus
    J'espère que je ne vous ai pas perdu en route, je ne suis pas très doué pour les explications...
    Merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pour parser du HTML c'est DOMDocument et grace a XPath tu pourras faire une recherche sur le mot désiré

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 12
    Par défaut
    Re, merci de ta réponse,

    Je suis au courant qu'il existe des library pour parser du HTML j'utilise simple_html_dom pour une autre partie de mon script.
    Ici vu que mon critère de recherche est entre les balises et non un attribut des balises, cela reviendrait à parser tous les liens puis faire une recherche dans chacun d'eux... je ne sais pas si cela serait efficace niveau perf.

    J'ai regardé un peu la doc XPath (que je ne connaissais pas au passage, merci) mais je ne vois pas trop comment cette lib pourrait m'aider... Il me semble que le problème soit le même on peut trier en fonction des attributs mais pas du contenu, si ?

    Je me trompe peut-être, j'ai juste regardé vite fait XPath mais des exemples que j'ai vu aucun ne présente la possibilité de faire ce que je souhaite.

    Je passerais par la méthode du parser + recherche individuelle si rien de mieux ne se présente en attendant si quelqu'un à une autre solution...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu peux faire ça avec la fonctions contains de xpath :
    http://support.microsoft.com/kb/304265

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 12
    Par défaut
    Hum.. ça parait bien, merci je met résolu si je réussi à l'implémenter

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 12
    Par défaut
    Encore moi, il doit y avoir un truc qui m’échappe...

    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $doc = new DOMDocument();
    @$doc->loadHTML($corps);
     
    $xpath = new DOMXPath($doc);
    $elements = $xpath->query("//a[contains(.,'contact')]");
    while(list( , $node) = each($elements)) {
    	echo $node->asXML();
    }
    Mais ça ne me renvoie rien... pourtant j'ai vérifié à la main et il y a bien des liens qui contiennent "contact" : /

    cf php.net

    Edit :
    En fait si je met un echo "test"; dans ma boucle ça n'affiche toujours rien donc je suppose que c'est ma requête xpath qui ne renvoie pas de résultat, y aurait-il une erreur de syntaxe ?

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

Discussions similaires

  1. Une capture d'écran sur ce cours a un lien cassé
    Par [ZiP] dans le forum Evolutions du club
    Réponses: 4
    Dernier message: 20/08/2011, 12h50
  2. Capturer le retour vers mon site aprés avoir visité des liens externes
    Par ammouna24 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 12/06/2009, 14h57
  3. Réponses: 4
    Dernier message: 26/02/2008, 17h57
  4. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  5. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 10h23

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