Aller au contenu

[Expressions régulières] Remplacement de balises


MaximuS

Sujets conseillés

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 ?

Modifié par MaximuS
Lien vers le commentaire
Partager sur d’autres 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'...

Lien vers le commentaire
Partager sur d’autres 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).

Lien vers le commentaire
Partager sur d’autres 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)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...