Jump to content
Sign in to follow this  
MaximuS

[Expressions régulières] Remplacement de balises

Rate this topic

Recommended Posts

J'ai un texte :

bla bla bla <balise>bla bla bla</balise> bla bla bla bla bla bla bla bla bla <balise>bla bla bla</balise> bla bla bla <balise>bla bla bla</balise>

Si j'utilise cette expression régulière:

$texte=eregi_replace("<balise>(.*)</balise>", "<h1>\\1</h1>", $texte);

, j'obtiendrais

bla bla bla <h1>bla bla bla</balise> bla bla bla bla bla bla bla bla bla <balise>bla bla bla</balise> bla bla bla <balise>bla bla bla</h1>

ce qui n'est évidemment pas ce que je souhaitais...

Comment faire pour faire subir l'expression régulière (il faut que ça soit une expression régulière, car un str_replace permettrai un passage d'erreurs dans le code html) à toutes les <balise> dans le texte sans qu'elles soient (leurs doubles) elles-même prisent dans le filtre ?

Autre façon de le demander: comment faire que pour chaque <balise> s'applique l'expreg ?

Edited by MaximuS

Share this post


Link to post
Share on other sites

De mémoire, je crois qu'il manque un ? après les (.*) ce qui signifierait 'on teste (.*) avec le plus petit écart', alors que là, c'est avec 'le plus grand écart'...

Share this post


Link to post
Share on other sites

Comme l'a indiqué anonymus, le problème est que par défaut il cherche à faire le plus grand (.*) possible.

Donc soit tu utilises (.*?) (il me semble qu'il faut mettre le ? dans la parenthèse, mais je n'en suis plus très sûr), soit tu utilises une forme avec exclusion, du style ([^<]*) (à adapter si tu as des balises imbriquées).

Share this post


Link to post
Share on other sites
soit tu utilises une forme avec exclusion, du style ([^<]*) (à adapter si tu as des balises imbriquées).

Il y deux heures, j'étais prêt à jurer (sur ma vie !) que le code suivant marchait ...

$texte=preg_replace("`<balise>([^</balise>].*)</balise>`", "<q>\\1</q>", $texte);

et il se trouve que j'avais tort... j'ai l'impression -injustifiée- que mon php déconne !

Sinon, je ne sais pas comment faire marcher le ? (j'ai testé sans succès)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...