Aller au contenu

[Expressions régulières] Remplacement de balises


Sujets conseillés

Posté (modifié)

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
Posté

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'...

Posté

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).

Posté
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)

Veuillez vous connecter pour commenter

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



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