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 19/12/2006, 11h26   #1
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Par défaut exclure mot dans chaine

Bonjour à tous et à toute,

admettons j'ai un code HTML comme ceci :

Code :
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 :
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.
  Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h30   #2
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
[^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)
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h31   #3
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Merci de ta réponse, mais ca ne fonctionne pas non plus, il me jarte aussi "titre_moment" :/
  Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h37   #4
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
ouais, mais je pense que ma réponses est bidon
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h38   #5
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
rhaaaa je suis sur que c'est tout bête en plus ....
  Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h44   #6
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
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 :
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...
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h47   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Voir les assertions (négatives avant) dans le tutoriel intitulé Initiation aux expressions régulières.


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 11h55   #8
Membre confirmé
 
Inscription : décembre 2006
Messages : 297
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 297
Points : 248
Points : 248
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'
juJuv51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h12   #9
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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 :
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 :
preg_match_all('/<td .+ class="(?<!tof)_moment">(.+)<[\/td|\/tr]+>/iU',$content,$result)
merci de m'éclaircir.
  Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h30   #10
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 795
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 795
Points : 1 685
Points : 1 685
Salut, tu peux faire ca avec un simple ou, si tu as vraiment besoin que de ces 2 classes :

Code :
preg_match_all('/(<td .+ class="(artiste_moment|titre_moment)">)(.+)(<\/td>|<\/tr>)/iU',$str,$result);
Bye
Djakisback est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 12h32   #11
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
oui, mais je voulais essayer avec les assertions histoire d'apprendre par la même occasion à les manipuler
  Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 13h47   #12
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
julp, tu pourrais me mettre sur la voie, concernant les assertions, merci bcp d'avance.
  Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 14h08   #13
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Tout simplement :
Code :
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 :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2006, 14h46   #14
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Ah oui, merci bcp c'est sympathique
  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 15h45.


 
 
 
 
Partenaires

Hébergement Web