MaximuS Posté 26 Octobre 2004 Partager Posté 26 Octobre 2004 (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é 27 Octobre 2004 par MaximuS Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 26 Octobre 2004 Partager Posté 26 Octobre 2004 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 More sharing options...
Remi Posté 27 Octobre 2004 Partager Posté 27 Octobre 2004 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 More sharing options...
MaximuS Posté 27 Octobre 2004 Auteur Partager Posté 27 Octobre 2004 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 More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant