Bonjour à tous.
J'ai encore un problème avec une expression régulière.
Par exemple, si je veux mettre en gras le texte en italique :
Code :
- $text = "<i>Premiere phrase.</i> Seconde phrase. <i>Troisième phrase.</i>";
- echo preg_replace("`(<i>.*</i> )`si", "<b>\\1</b>", $text)."<br>\n";
- // Affiche "<b><i>Premiere phrase.</i> Seconde phrase. <i>Troisième phrase.</i></b><br>"
- // Voici l'astuce que j'utilise actuelement.
- echo preg_replace("`(<i>[^<]*</i> )`si", "<b>\\1</b>", $text)."<br>\n";
- // Affiche "<b><i>Premiere phrase.</i></b> Seconde phrase. <b><i>Troisième phrase.</i></b><br>"
- // Ca marche, mais il suffit que mon texte change pour que ça foire.
- $text = "<i>Premiere <u>phrase</u>.</i> Seconde phrase. <i>Troisième phrase.</i>";
- echo preg_replace("`(<i>[^<]*</i> )`si", "<b>\\1</b>", $text)."<br>\n";
- // Affiche "<i>Premiere <u>phrase</u>.</i> Seconde phrase. <b><i>Troisième phrase.</i></b><br>"
|
Avec « ([^<]*) » je capture n'importe quel caractère qui n'est pas « < », un nombre de fois indéfini.
Or, je veux capturer n'importe quel caractère un nombre de fois indéfini, tant qu'on ne rencontre pas « </i> ».
C'est faisable ? Si oui, comment ?
Merci d'avance.