Page 1 sur 1

Supprimer les paragraphes avec preg_replace

Posté : 31 janv. 2014, 15:58
par Elie
Bonjour,

Je voudrais supprimer les balises <p> grace a un preg_replace.
Dans ma version seul les balises avec une classe s'enleve mais pas juste les <p>
Pouvez-vous me corriger ca ?
preg_replace('#<(p)[^>]+>(.*?)</\1>#s', '$2', $chaine);
Merci,

Elie

Re: Supprimer les paragraphes avec preg_replace

Posté : 01 févr. 2014, 17:15
par jojolapine
Bonjour,

Il faudrait que tu essayes de comprendre le fonctionnement de cette expression régulière ;)

là voici commentée :

Code : Tout sélectionner

~ <(p) # caractère < suivit du caractère p capturé [^>]+ # tout caractère qui n'est pas > une ou plusieurs fois > # caractère > (.*?) # n'importe quoi 0 ou plusieurs fois capturé de manière "non-gourmande" (http://www.lumadis.be/regex/tuto_pcre.php#gourmand) </\1> # caractères <, / puis le résultat de la première capture (p) puis > ~xs
Donc là dedans, qu'est-ce qui devrait être changé d'après toi pour autoriser un <p> simple sans attributs ?
Voici un lien pour faire tes tests : http://lumadis.be/regex/test_regex.php?id=2072

Bon courage !

Re: Supprimer les paragraphes avec preg_replace

Posté : 01 févr. 2014, 20:59
par Elie
Salut Jojo,

Justement, la lecture je l'avais mais je ne sais pas comme dire ca ou ca autre que (>|^>) qui biensur ne marche pas.
Car la effectivement, il faut impérativement que le <p ne soit pas suvi d'un > mais je voudrais soit l'un soit l'autre ...

Je suis callé en PHP mais j'avoue que les regex m'ont toujours laissés perplexe !

Re: Supprimer les paragraphes avec preg_replace

Posté : 01 févr. 2014, 21:28
par jojolapine
C'est cette partie là qu'il faut modifier :

Code : Tout sélectionner

[^>]+ # tout caractère qui n'est pas > une ou plusieurs fois
Plus particulièrement le "+", qui veut dire "un ou plus".
Il te faut donc le remplacer par "0 ou plus" !

Re: Supprimer les paragraphes avec preg_replace

Posté : 02 févr. 2014, 16:55
par Elie
* Indique 0, 1 ou plusieurs occurrences du caractère ou de la classe précédente
Effectivement, je voyais pas ca si simple ... Merci de ne pas m'avoir répondu directement mais poussé a comprendre :)