OVH Cloud OVH Cloud

Expression reguliere

15 réponses
Avatar
Benjamin
Bonjour,

J'utilise preg_replace dans un de mes scripts php pour remplacer
l'expression ''' (triple guillemet) par la balise html <b>

Exemple :
Bonjour je m'appelle ''' john ''' et j'aime le php
Devient
Bonjour je m'appelle <b> john </b> et j'aime le php

J'ai écris la ligne suivant :
$text = preg_replace( "/\'\'\'([^\'\'\']*)\'\'\'/","<b>\\1</b>",$text);

Cela fonctione bien, excepté dans les cas suivant :
Bonjour je m'appelle ''' l'anata ''' et j'aime le php

Un pro des expression régulière pourrait-il m'aider ?

Merci
Ben

5 réponses

1 2
Avatar
Olivier Miakinen

Le cas général est : il ne faut pas échapper les apostrophes dans une
chaîne délimitée par des guillemets.
Le cas particulier : cela ne porte pas à conséquence si la chaîne sert
de masque pour une fonction pre[g]_xxxx


Nous sommes d'accord.

Nous sommes donc bien d'accord : dans ce masque, les antislashes sont
inutiles mais ils n'empêchent pas le bon fonctionnement du preg_match.

ou j'ai pas bon ?


Si, si, et je suis d'accord avec cleo également.

Avatar
Domenjoud Yannick
Le plus comique c'est quand, dans votre expression regulière, vous
recherchez un ...


Pour rechercher un , il suffit de l'échapper lui même par .
preg_replace("#dossier..#U","", $text);

Cordialement,
Yannick

Avatar
cleo
Pour rechercher un , il suffit de l'échapper lui même par .
preg_replace("#dossier..#U","", $text);


Vous avez testé ?

--
Cléo.

Avatar
Olivier Miakinen

Le plus comique c'est quand, dans votre expression regulière, vous
recherchez un ...


Pour rechercher un , il suffit de l'échapper lui même par .
preg_replace("#dossier..#U","", $text);


Ben non, justement. L'exemple de Benjamin prouve que cela ne suffit
pas puisque ses restaient de simples et que tes deviennent
aussi de simples .

Il doit falloir les quadrupler (ou au moins les tripler dans les
cas favorables du style de ceux de Benjamin, mais ce n'est pas à
conseiller) :
preg_replace("#\dossier\..#U","", $text);


Avatar
Domenjoud Yannick
Autant pour moi, en effet il faut les quadrupler. Une erreur de ma part.

Cordialement,
Yannick
1 2