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 :

Récupérer tous les liens d'une certaine classe CSS [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut Récupérer tous les liens d'une certaine classe CSS
    Bonsoir,

    Je vous contacte car je suis en légère galère avec les regex.
    Je souhaite récupérer dans un document HTML tous les liens qui ont une certaine classe CSS.

    Le soucis est qu'il y a l'utilisation de la librairie OVL (overlib) qui permet de créer des popup au survol de la souris (onmouseover). Jusque là, rien de bien terrible, sauf quand bien entendu ces pop-ups contiennent eux mêmes des liens... Et donc, j'n'arrive absolument pas à faire une regexp qui prend le lien

    Voici par exemple un lien que j'aimerais récupérer. Il a la classe cl. Je ne suis pas responsable du code HTML que je cherche à récupérer. C'est le code d'un jeu et je cherche à faire un parseur pour créer un outil stratégique (j'ai l'aval des administrateurs, donc aucun problème de ce côté là.)


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a><li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/></a>

    J'aimerais donc réussir dans un premier temps à capturer tous les liens de cette forme.

    J'ai essayé quelque chose comme ça...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $Code = $_POST['codehtml'];
    unset($_POST);
     
    //tentative de recup de tous les liens de la page
    $motif='#<a class=cl(.*?)>(.*?)</a>#is';
     
    preg_match_all($motif,$Code,$out,PREG_PATTERN_ORDER);
     
    foreach ($out[1] as $link)
    {
      echo "$link<br />";
    }

    Bien entendu, ça ne marche pas... et rien que sur ce lien de test... voilà là réponse qu'l me retourne :

    style="left:230;top:300" href=javascript:void(0); onclick="return overlib('

    Je ne vois absolument pas comment faire...
    Avez-vous une idée ?

  2. #2
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Je pense qu'une image m'évitera un long discours où je risque de ne pas être clair.



    La carte est généré par 121 liens de types <a class=cl ....>

    Chaque lien contient : 1 image de fond, 1 image de personnage, de décors ou d'ombre. Nous appellerons cette ensemble "une case".

    Dans chaque lien, il y a un attribut onmouseover=() [partie orange sur mon image] qui contient les données de l'infobulle (celle que j'ai encadré en orange).

    Chaque image (sur 2 ou 3 niveaux) sont des enfants du lien <a class=cl.
    Donc en terme d'arborescence du code on a :

    - a class=cl
    |--------------> attribut "onmouseout"
    |---->img1
    |---->img2
    |---->img3
    - </a>
    - a class= cl ...

    Ce que je souhaite :
    1- Capturer chaque lien
    2- extraire chaque onmouseover [partie orange]
    3- récupérer chaque enfant (les images donc) [partie noire]

    Et en faire des données que je peux exploiter.

    J'arrive sans aucun problème à capturer les noms de chaque joueur, les familiers...
    Mais cette méthode me gène car les cases ne contenant pas ses infos (et en contenant d'autres) sont complètement ignorés et m'empêche de travailler plus en détails.

    Du coup, je suis persuadé en réussissant à récupérer chaque case, je pourrais les traiter en fonction du contenu : si c'est un dieu, si c'est un décor, si un animal...

    Et au jour d'aujourd'hui, je n'arrive pas à créer le pattern pour récupérer le gros liens ou du moins le contenu onmouseover de chaque lien...

    Voilà ma demande. J'espère avoir réussi à vous éclaircir.

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    OK, moi mieux comprendre.
    Pas le temps d'approfondir parce qu'il est tard, mais je te laisse ça pour le moment. La suite plus tard si nécessaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    $str = <<< EOS
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a>
    <li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/></a>
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a>
    <li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/></a>
    EOS;
     
    //tentative de recup de tous les liens de la page
    $motif='#<a class=cl [^>]* (?:onmouseover|onclick)="(return overlib[^"]+)"[^>]*(?:onmouseover|onclick)="(return overlib[^"]+)" [^>]*>(.*?)</a>#is';
     
    preg_match_all($motif, $str, $out, PREG_PATTERN_ORDER);
    print_r($out);

  4. #4
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Je viens de la tester. Ca ne me renvoie pas grand chose de convainquant

    Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) )

    J'ai essayé de la comprendre pour peut être d'où vient l'erreur, mais j'n'arrive pas à grand chose.

    Actuellement, les données sont postées. Je récupère les données dans une variable POST.
    J'ai regardé la notation HEREDOC que tu utilises.

    Est-ce que cela pourrait influer sur la nature et la finalité de la recherche ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    L'image du message #3 semble dire <a class="cl"...>, alors ajoute les guillemets autour de cl aussi dans la regex.

  6. #6
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Ca c'est l'extension Firebug qui corrige légèrement le code et rajoute les double quote.
    Le code source ne contient pas de guillemet autour de la classe.

    Merci d'avoir soulevé la remarque car c'est vrai que j'n'avais pas remarqué et ça aurait très bien pu être une erreur.

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Lost In Translation Voir le message
    Je viens de la tester. Ca ne me renvoie pas grand chose de convainquant

    Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) )

    J'ai essayé de la comprendre pour peut être d'où vient l'erreur, mais j'n'arrive pas à grand chose.

    Actuellement, les données sont postées. Je récupère les données dans une variable POST.
    J'ai regardé la notation HEREDOC que tu utilises.

    Est-ce que cela pourrait influer sur la nature et la finalité de la recherche ?
    Est-ce que l'exemple que je t'ai donné fonctionne et se rapproche-t-il de ce que nous voulons ?
    Si oui, nous n'avons plus qu'à chercher les différences entre la chaîne exemple et le cas réel.

  8. #8
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Le code que tu as produit me renvoie une erreur.

    Parse error: syntax error, unexpected $end in /var/www/projets_finis/carte_ew/test.php on line 13
    J'ai pourtant fait un copier coller de ce que tu as écrit. Sur mon editeur de texte, il semble effectivement y avoir un possible problème d'échappement dans $str. Mais comme tu utilises une syntaxe que je ne connais pas, j'ai préféré ne pas toucher.

    Donc je ne peux absolument pas te dire si le code renvoie quelque chose d'approchant.

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est con ça. J'utilise cette syntaxe pour ce genre d'exemple qui mixe des simples et double quotes afin de ne pas avoir à se prendre la tête sur les échappements.

    A suivre...

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Une petite vérification : quelle est la valeur du paramètre magic_quotes_gpc ?

  11. #11
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Elle est à Off. Ca expliquerait pourquoi ça merdouille légèrement peut être ?

    Je n'utilise pas magic_quote_gpc pour quelques points de sécurité et pour faire la transition avec PHP6 qui l'a retirée.

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est vraiment dommage que HEREDOC ne parche pas chez toi, car voilà ce que j'obtiens en tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    $str = <<< EOS
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a>
    <li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/></a>
     
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a>
    <li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/2.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n1.png"/></a>
    EOS;
     
    $motif='#<a class=cl [^>]* (?:onmouseover|onclick)="(return overlib[^"]+)"[^>]*(?:onmouseover|onclick)="(return overlib[^"]+)" [^>]*>(.*?)</a>#is';
     
    preg_match_all($motif, $str, $out, PREG_PATTERN_ORDER);
     
    $overlibs = array_merge($out[1], $out[2]);
     
    foreach($overlibs as $str) {
        $reg = '#href=([^\s]+)#i';
        if ( preg_match_all($reg, $str, $match) ) print_r($match[1]) ;
    }
     
    print_r($out[3]);
    Et le résultat :

    Array
    (
    [0] => soigner.php?xc=77&yc=101&t=p&idc=14641
    [1] => choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641
    [2] => msg_frame.php?x=2&dest=Kezar
    [3] => rp_show.php?idc=14641
    )
    Array
    (
    [0] => soigner.php?xc=77&yc=101&t=p&idc=14641
    [1] => choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641
    [2] => msg_frame.php?x=2&dest=Kezar
    [3] => rp_show.php?idc=14641
    )
    Array
    (
    [0] => <img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/>
    [1] => <img class=bg src="img/t/2.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n1.png"/>
    )

  13. #13
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Lost In Translation Voir le message
    Elle est à Off. Ca expliquerait pourquoi ça merdouille légèrement peut être ?

    Je n'utilise pas magic_quote_gpc pour quelques points de sécurité et pour faire la transition avec PHP6 qui l'a retirée.
    C'est parfait, ce sont les réglages qu'il faut utiliser et j'ai les mêmes.
    C'est d'autant plus gênant de ne pas obtenir les mêmes résultats.

  14. #14
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Ah, bah ton résultat permet de montrer que ça n'extrait pas réellement les bonnes infos. Mais c'est vraiment sur la bonne voie. Mais j'ai du mal m'exprimer.

    Pour les images (array numéro 3), c'est parfait, c'est celles là que je veux extraire.
    Mais en fait, je cherche surtout à extraire les données contenus dans le onmouseover, c'est à dire :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <b>76 / 100 </b>     distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif> 03/07 à 20:12<br><img src=img/s/resist.gif> 03/07 à 18:40<br><img src=img/s/a12.gif> 02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF'

    Ce sont exactement ces infos là + les images que tu as su extraire qui m'intéressent.

  15. #15
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ceci donc
    '<b>77 / 101 </b> distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>03/07 à 20:12<br><img src=img/s/resist.gif>03/07 à 18:40<br><img src=img/s/a12.gif>02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1 benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF'

    '<b>77 / 101 </b> distance : 2<br><hr><b>Kezar</b>, Guerrier Nain <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>03/07 à 20:12<br><img src=img/s/resist.gif>03/07 à 18:40<br><img src=img/s/a12.gif>02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1 benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF'
    Array
    (
    [0] => <img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/>
    [1] => <img class=bg src="img/t/2.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n1.png"/>
    )
    qui sort de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
     
    $str = <<< EOS
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a>
    <li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Nécromant Elfe <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/0.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n0.png"/></a>
     
    <a class=cl style="left:230;top:300" href=javascript:void(0); onclick="return overlib('<b>Action :</b><LI><a href=soigner.php?xc=77&yc=101&t=p&idc=14641 target=f2>Soigner (9 PA)</a><LI><a href=choix_ench.php?t=1&d=2&xc=77&yc=101&idc=14641 target=f2>Enchanter</a>
    <li><a href=msg_frame.php?x=2&dest=Kezar target=f2>Message</a><li><a href=rp_show.php?idc=14641 target=f2>Consulter son profil</a>',STICKY, CAPTION,'77 / 101 &nbsp;&nbsp;&nbsp;&nbsp; distance : 2',FGCOLOR,'#CCCCFF');" onmouseover="return overlib('&nbsp;&nbsp;&nbsp;&nbsp;<b>77 / 101 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 2<br><hr><b>Kezar</b>, Guerrier Nain <br><u>Niveau :</u> <b>27</b><br><u>Escouade :</u> Oskorei<br><u>Pv :</u> 517 / 517<hr><u>Enchantement(s) actif(s) :</u> <br><img src=img/s/feline.gif>&nbsp;03/07 à 20:12<br><img src=img/s/resist.gif>&nbsp;03/07 à 18:40<br><img src=img/s/a12.gif>&nbsp;02/07 à 12:31<hr><b>Message allié :</b> yobb 1po Kael 4p Coks1 Ryujinn2 nausica 1 vreanor 1  benio 2 Silgalind2 Shandor1cromagnon 3 nempite2',FGCOLOR, '#CCFFFF');" onmouseout="return nd();"><img class=bg src="img/t/2.gif"/><img class=pj src="img/p/0/2/0_29.gif" width=40/><img class=ov src="img/n/n1.png"/></a>
    EOS;
     
    $motif='#<a class=cl .*? onmouseover="return overlib\(([^"]+)\);" [^>]*>(.*?)</a>#is';
     
    preg_match_all($motif, $str, $out, PREG_PATTERN_ORDER);
     
    foreach($out[1] as $str) {
        $str = str_replace('&nbsp;', '', $str);
        print_r($str."\n");
    }
     
    print_r($out[2]);

  16. #16
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    D'une part... C'est exactement ça.
    D'une deuxième part, c'est vraiment exactement de chez exactement ça
    D'une troisième part, en plus d'être exactement ça, je viens de tester et ça marche parfaitement

    Donc là, gros gros merci. Parce que ma méthode actuelle ne me permettait plus de faire évoluer l'outil et ça plusieurs semaines que j'étais bloqué là dessus.

    Je comprends une bonne partie de l'expression rationnelle que tu as créé, mais je n'en comprends pas la partie la plus importante.

    return overlib\(([^"]+)\);" [^>]*>
    Pourrais-tu, si ça ne te dérange pas - je sais j'abuse - trop, me faire un petit topo sur cette partie ?

  17. #17
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*
    <a class=cl                     => je me positionne juste après la classe cl
    .*?                             => j'avance traquillement en vérifiant que je n'ai pas onmouseover derrière (effet du ?)
    onmouseover="return overlib\((  => je me positioinne juste après la première parenthèse de l'overlib
    [^"]+)\);"                      => je capture tout ce qui n'est pas un ", puis je lache (dans l'ordre) le point-virgule et la parenthèse
    [^>]*>                          => j'avance peinard jusqu'à la fermeture de la balise ouvrante (1)
    (.*?)</a>#is';                  => je capture tout ce qu'il y a avnat la balise fermante
    (1) : attention, si un auttribut overlib se trouve dans cet espace, il va foutre en l'air la routine. A surveiller...

    Voilou

  18. #18
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    En tout cas gros gros merci, parce que tu m'as vraiment permis d'une part de comprendre mieux les regex et ensuite, ça m'a permis vraiment d'avancer à grand pas dans le projet.

    J'n'avais pas réalisé que les données capturées pouvaient toutes être quasiment réutilisées sans traitement...

    Alors qu'avant, pour une chose qui marchait mais moins bien, il me fallait une 15 aines d'opérations... et des tonnes de regex.

    Merci merci !

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

Discussions similaires

  1. [RegEx] Récupérer tous les liens d'une page
    Par micatmidog dans le forum Langage
    Réponses: 13
    Dernier message: 03/11/2006, 01h37
  2. Récupérer tous les liens d'une page html
    Par lapras123 dans le forum C
    Réponses: 28
    Dernier message: 08/08/2006, 11h30
  3. [Mail] Récupérer tous les liens et les titres d'une page
    Par dragon noir dans le forum Langage
    Réponses: 12
    Dernier message: 03/07/2006, 16h09
  4. [RegEx] récupérer tous les liens d'une page
    Par italiasky dans le forum Langage
    Réponses: 15
    Dernier message: 08/04/2006, 18h55
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

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