[RESOLU] Supprimer les paragraphes avec preg_replace

Mammouth du PHP | 1339 Messages

31 janv. 2014, 15:58

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
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
ViPHP | 3607 Messages

01 févr. 2014, 17:15

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 !

Mammouth du PHP | 1339 Messages

01 févr. 2014, 20:59

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 !
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
ViPHP | 3607 Messages

01 févr. 2014, 21:28

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" !

Mammouth du PHP | 1339 Messages

02 févr. 2014, 16:55

* 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 :)
Bon sinon tu me fais un message privé et on se fait un TeamViewer