ekra
Juillet 3, 2006, 9:27
1
Bonjour à tous,
Je suis en train d’essayer de faire un site avec quelques scripts PHP.
Un moment, pour utiliser une sorte de BBCode (mais différent ^^), j’ai utilisé la fonction “preg_replace”.
Exemple :
$nouveau_contenu = preg_replace('/<br\s*\/>[\n\s]*<br\s*\/>+/si', '</p><p>', $contenu)
Seulement on m’a un peu aidé pour les expressions régulières (bien que j’ai regardé quelques tutos).
Il me reste encore quelques endroits à éclairer si vous le voulez bien.
1/ Doit-on toujours commencer et finir l’expression par “/” ?
2/ Que signifie le ‘+/si’ ?
Je vous serais reconnaissant de m’aider.
Merci d’avance !
pour si (et pas +/si) , tu trouveras de la doc là : http://fr.php.net/manual/fr/reference.pcre…n.modifiers.php
pour ‘/’, il s’agit de ton délimiteur de regexp. Il doit toujours être présent en début et en fin (après peuvent se trouver une ou plusieurs options).
tu peux aussi utiliser @ :
‘@<br\s*>\s*<br\s*>+@si’
Note que \s = caractère d’espacement, et en particulier les sauts de ligne.
ekra
Juillet 3, 2006, 10:52
3
Purée Merci beaucoup, si tu savais le temps que j’ai attendu pour avoir une réponse comme la tienne ! (ça fait un moi, mais je n’avais pas posté sur Clubic ;p).
J’ai presque tout compris, (oui mais y’a un piège !) juste un truc que j’assimile pas :
le +, comme dans “a+” signifie “a” ou “aa” ou “aaa” …
Mais pourquoi veut-on un ">+" ??? on cherche ">" ou ">>" ou … ???
Merci en tout cas de ta réponse !!!
= quantificateur équivalent à {1, } signifie : 1 ou plusieurs fois l’expression devant.
a+ = a ou aa, etc
<+ = < ou <<, etc
Comme je sais pas ce que doit faire ton algo, je n’en dirai pas plus
ekra
Juillet 4, 2006, 11:15
5
Le but est de remplacer 2 "entré" (équivalent à <br/><br/>) par </p><p>.
Par exemple :
<p> Bonjour, <br />
<br />
Je vous serez gré de gnagnagnagnagnagna</p>
Par :
<p> Bonjour, </p><p>
Je vous serez gré de gnagnagnagnagnagna</p>
Voila !
Si quelqu’un comprend le but du “+”, merci de m’aider.
Asbel
Juillet 4, 2006, 2:11
6
Le +, c’est présent 1 ou plusieurs fois. Donc là ça matchera pour >, >>, >>> etc.
Dans ton cas je n’ai pas l’impression qu’il soit utile, en effet.
Asbel
Juillet 4, 2006, 2:16
7
Ou alors :
$nouveau_contenu = preg_replace('/<br\s*\/>([\n\s]*<br\s*\/>)+/si', '</p><p>', $contenu);
Ça me semblerait plus logique : en ajoutant les parenthèses ça supprimerait tous les <br/> successifs (>= 2 <br /> d’affilée)
Asbel:
Ou alors :
$nouveau_contenu = preg_replace('/<br\s*\/>([\n\s]*<br\s*\/>)+/si', '</p><p>', $contenu);
Ça me semblerait plus logique : en ajoutant les parenthèses ça supprimerait tous les <br/> successifs (>= 2 <br /> d’affilée)
[HS total]
tu permet que je quote ca pour le mois de décembre?
[/HS total]
Asbel
Juillet 4, 2006, 3:02
9
Tu peux, tu peux
On a enfin trouvé l’arme absolue contre les BR :sol:
ekra
Juillet 4, 2006, 4:56
10
Bonjour,
Oui il me semble bien que tu ais raison, je comprend mieux maintenant.
Je vous remercie tous beaucoup !