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 :

exclure mot dans chaine [Fait]


Sujet :

Langage PHP

  1. #1
    Fabouney
    Invité(e)
    Par défaut exclure mot dans chaine
    Bonjour à tous et à toute,

    admettons j'ai un code HTML comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <table width="153" border="0" cellspacing="0" cellpadding="0" class="moment">
      <tr><td align="center" valign="bottom" class="artiste_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Jean-Jacques Goldman</a></td></tr>
      <tr><td align="center" valign="middle" class="tof_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')"><img src="http://cache.yacast.fr/V4/img_tmp/T_552_177232.JPG" width="80"  height="80" alt="" border="0"></a></td></tr>
      <tr><td align="center" valign="top" class="titre_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Elle attend</a></tr>
    </table>
    je souhaite extraire le contenu des balise <td> dont la class (en HTML) est egale à "artiste_moment" et "titre_moment" (mais exlure tof_moment), j'avais procédé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/<td .+ class="\w+">(.+)<[\/td|\/tr]+>/iU',$content,$result);
    la il me prend les 3 celulle ("titre_moment", "artist_moment" et "tof_moment")
    est-il possible dans mon pattern de rajouter un tite condition qui exclu la class qui commence par le sous-masque "tof" si je fait [^tof] ca va pas, il me retire aussi "titre_moment" ca il commence par "t" (logique)

    merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    [^tof{3}] ? je ne suis pas un expert en expression régulière (enfin je suis une ..... en expression régulière, mais je pense que logiquement (ma logique lol) ça devrait marcher)

  3. #3
    Fabouney
    Invité(e)
    Par défaut
    Merci de ta réponse, mais ca ne fonctionne pas non plus, il me jarte aussi "titre_moment" :/

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    ouais, mais je pense que ma réponses est bidon

  5. #5
    Fabouney
    Invité(e)
    Par défaut
    rhaaaa je suis sur que c'est tout bête en plus ....

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    j'ai testé avec The Regex Coach plusieurs possibilité et je ne trouve pas...
    Testeur Regex
    Tutoriel Expressions régulières PCRE

    il en parle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $motif = '/^\d+;[^;]+;[^;]+;HADDOCK;([^;]+);([^;]+);.*/m';
    preg_match_all($motif, $txt, $out);
    mais uniquement pour tout caractère sauf ';' 1 fois ou plus...
    et pas toute chaine de caractère sauf 'tof' par exemple...

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Voir les assertions (négatives avant) dans le tutoriel intitulé Initiation aux expressions régulières.


    Julp.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Op dans le bookmark, merci julp.

    julp, tu viens de répondre à un sujet que j'avais initialement crée hier, merci.
    Remplacer uniquement '\n' et pas ne pas toucher à '\\n'

  9. #9
    Fabouney
    Invité(e)
    Par défaut
    je n'arrive pas a utilise ton exemple julp, ce serait plutot une assertion négative arriere moi non ?

    prendre tout ce qui ne commence pas par tof_ reviens à faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/<td .+ class="#(?<!tof)_moment#">(.+)<[\/td|\/tr]+>/iU',$content,$result)
    mais ca ne marche pas, j'ai essayé sans les "#", mais pareil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/<td .+ class="(?<!tof)_moment">(.+)<[\/td|\/tr]+>/iU',$content,$result)
    merci de m'éclaircir.

  10. #10
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut, tu peux faire ca avec un simple ou, si tu as vraiment besoin que de ces 2 classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/(<td .+ class="(artiste_moment|titre_moment)">)(.+)(<\/td>|<\/tr>)/iU',$str,$result);
    Bye

  11. #11
    Fabouney
    Invité(e)
    Par défaut
    oui, mais je voulais essayer avec les assertions histoire d'apprendre par la même occasion à les manipuler

  12. #12
    Fabouney
    Invité(e)
    Par défaut
    julp, tu pourrais me mettre sur la voie, concernant les assertions, merci bcp d'avance.

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $content = <<< STRING
    <table width="153" border="0" cellspacing="0" cellpadding="0" class="moment">
      <tr><td align="center" valign="bottom" class="artiste_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Jean-Jacques Goldman</a></td></tr>
      <tr><td align="center" valign="middle" class="tof_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')"><img src="http://cache.yacast.fr/V4/img_tmp/T_552_177232.JPG" width="80"  height="80" alt="" border="0"></a></td></tr>
      <tr><td align="center" valign="top" class="titre_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Elle attend</a></tr>
    </table>
    STRING;
     
    preg_match_all('/<td .+ class="(?!tof_)\w+">(.+)<[\/td|\/tr]+>/iU', $content, $result);
    print_r($result);
    C'est bien ici une assertion négative avant. Où l'on récupère :
    Code X : 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
    Array
    (
        [0] => Array
            (
                [0] => <td align="center" valign="bottom" class="artiste_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Jean-Jacques Goldman</a></td>
                [1] => <td align="center" valign="top" class="titre_moment"><a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Elle attend</a></tr>
            )
    
        [1] => Array
            (
                [0] => <a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Jean-Jacques Goldman</a>
                [1] => <a href="javascript:popUp('http://player.cheriefm.fr/V4/cheriefm/cheriefm_launch_V3.html','630','240','no')" class="texte10">Elle attend</a>
    
            )
    
    )


    Julp.

  14. #14
    Fabouney
    Invité(e)
    Par défaut
    Ah oui, merci bcp c'est sympathique

Discussions similaires

  1. [XL-2010] Recherche mot dans chaine
    Par Akhlan dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/12/2013, 17h13
  2. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  3. [WD-2003] Trouver mot dans chaine de caractères >résultat
    Par QuestVba dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/12/2012, 13h10
  4. Controle 1er mot dans chaine
    Par lodan dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/07/2006, 15h33
  5. [RegEx] suppression mot dans chaine
    Par vivian dans le forum Langage
    Réponses: 3
    Dernier message: 18/07/2006, 18h23

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