[Résolu] PHP - RegEx - Expressions Régulières

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.

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

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.

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.

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? :smiley:
[/HS total]

Tu peux, tu peux :smiley:

On a enfin trouvé l’arme absolue contre les BR :sol:

Bonjour,

Oui il me semble bien que tu ais raison, je comprend mieux maintenant.
Je vous remercie tous beaucoup ! :slight_smile: