Expressions régulières :Training

Eléphant du PHP | 353 Messages

05 mai 2006, 09:18

Bonjour , je me suis dis que j'allais étudier un peu les expressions régulières .

J'ai déjà compris pas mal grâce à des exercices que je me donne sur http://www.lumadis.be/regex/test_regex.php#pointeur_aff

J'ai donc commencé par supprimer les balises <table></table>

Jusque là aucun probleme , j'arrive à supprimer toutes les balises
</> mais je bloque quand les balises se composent de compléments tel que

<table width="100">

Voici mon code qui fonctionnepour le cas précédent c'est à dire le cas suivant >

<table><tr><td><div><h1><b>C'est l'heure de la pause, non ?</h1></div></td></tr></b></table>

mon regex =>#<*/*+\w+>|(.)# (preg_match_all)

je récupére bien le texte en vert

Comment faire pour obtenir la meme chose si j'ai ceci >

<table width="100%"><tr><td><div align="center"><h1><b>C'est l'heure de la pause, non ?</h1></div></td></tr></b></table>

j'ai déjà testé plusieurs trucs mais sans succès !

Merci d'avance

Mammouth du PHP | 19672 Messages

05 mai 2006, 10:21

Je ne suis pas certain de bien comprendre, mais pour ce qui est du html, ton code peut avantageusement être simplifié pour exactement le même résultat.

Au lieu de :
<table width="100%"><tr><td><div align="center"><h1><b>C'est l'heure de la pause, non ?</h1></div></td></tr></b></table> 
utilise plutôt:
<table width="100%"><tr><th><h1>C'est l'heure de la pause, non ?</h1></th></tr></table> 
-1- h1 est déjà un élément de type "bloc", donc le mettre à l'intérieur d'un <div> est inutile;
-2- h1 est un titre et par défaut sera en gras, donc la balise <b> est inutile;
-3- en utilisant une balise th au lieu de td, le contenu sera automatiquement centré : l'attribut "center" devient donc inutile.

Partant de là, essaye d'expliquer ce que tu veux faire plus clairement, parce que je ne saisis pas bien.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 mai 2006, 10:41

Oh ben si on en est à nettoyer le code html, moi je propose carrément :

Code : Tout sélectionner

<div class="monStyle">C'est l'heure de la pause, non ?</div>
Et tout le reste (présentation des données) va dans du css :)

Code : Tout sélectionner

.monStyle { text-align:center; font-weight:bold; font-size:24px; }
Par contre pour ton expression, y a un truc que je ne comprend pas très bien c'est le "/*+" ??? => 0 à n, mais 0 à 1 fois ? ça marche ça ??

Pourquoi pas quelque chose du genre : #</+.*>|(.*)#
- commence par un <
- suivi ou non par un et un seul /
- puis n'importe quel caractère, n fois
- jusqu'au >


Il ne faut pas croiser les balises... c'est mal !

Eléphant du PHP | 353 Messages

05 mai 2006, 10:50

lol , j'ai mis ce code n'importe comment juste pour tester le regex !!

Vous n'avez pas bien saisi ma question lol

je veux juste connaitre le moyen de supprimer une balise contenue entre <> meme si elle contient des arguments tel que "class" , "align" , etc


J'y suis bien parvenu si il ne conteint pas celà avec ce regex

#<*/*+\w+>|(.)# (preg_match_all)

PS : le tien ryle selectionne tout je n'exclus rien du code.

http://www.lumadis.be/regex/test_regex.php#pointeur_aff

Tu peux voir ca là

Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 mai 2006, 10:54

Si si, j'avions bien compris que tu voulais juste jouer avec les regexp, d'où ma suggestion :
Pourquoi pas quelque chose du genre : #</+.*>|(.*)#
- commence par un <
- suivi ou non par un et un seul /
- puis n'importe quel caractère, n fois
- jusqu'au >
Cela dit, si au dela d'un exercice sur les expressions régulière, ton but est juste de virer les balises html, y a le strip_tags qui fait ça très bien ;)

Eléphant du PHP | 493 Messages

05 mai 2006, 10:56

preg_replace( '/(<[^>]>)/', '', $str );
Rapide, bourrin, efficace :D

EDIT: Comme Ryle l'a dit, strip_tags() est tout aussi effice ! Bench strig_tags et le mienne (ou une autre) et compare ;)

Eléphant du PHP | 353 Messages

05 mai 2006, 11:33

merci bcp pour vos conseils !!

Je n'en ai pas la nécessité pour le moment , mais j'essaie d'apprendre un peu cette technique de regexx qui peu tjs etre pratique !!

en tout cas merci bcp

ViPHP
ViPHP | 1380 Messages

05 mai 2006, 13:32

preg_replace( '/(<[^>]>)/', '', $str );
Rapide, bourrin, efficace :D
Dans cet exercice de style, ne manquerait-il pas un quantificateur par hasard? :wink:
ripat

Eléphant du PHP | 493 Messages

05 mai 2006, 13:35

Cela ce peu bien :-k Surement une toute pitite pitite rikiki étoile :P