Durant la réalisation de mon colorisateur de code, un problème qui s'est posé à moi a été la détection de chaine de caractères dans un code source. Le point de blocage essentiel était qu'un chaine de caractère peut être délimitée par une double quote, mais contenir des double quotes échappées, qui ne marquent pas la fin de la chaîne .... Sachant qu'une double quote précédée d'un antislash n'est pas forcément échappée, si cet antislash est lui-même échappé ... par un antislash qui peut lui-même être échappé, etc... 8O

N'ayant pas trouvé de solution à ce problème, je gérait donc uniquement l'échappement de la double quote, ou l'échappement du l'anti-slash précédent. En fait, je gérait le fait qu'il y ait soit un, soit deux antislash avant une double quote (c'est bon, tout le monde suit la ? :P)

La solution est en fait tout simple, et elle m'est apparue en parcourant une mailing list dédiée à Python, que je ne retrouve plus ... :$ En fait, une chaîne de caractère consiste en :
:arrow: un caractère de début (ici, la double quote ou la simple quote)
:arrow: une série de caractères qui sont soit un antislash et un caractère (un caractère échappé quoi), soit un caractère différent du délimiteur de départ
:arrow: un délimiteur de fin, identique à celui de départ

Ce qui nous donne en pratique :$pattern = "#(("|')(?:(?:\\\\.)|(?:[^\\2]))*?\\2)#is";
echo preg_replace($pattern, "[string:begin]$1[string:end]", $str);

Et voilà, toutes les chaines de caractères apparaissant dans la variable $str seront encadrées par [string:begin]...[string:end]8)

Quelqu'un me disait récemment "En fait, c'est vachement puissant les expressions régulières" ... Ben oui ! :D Pour la peine, je rajoute en bas de mon menu une petite image trouvée chez ericd : "MM PLEASE GIVE US FLASH REGEX" C'est vrai qu'un support natif des expressions régulières dans Flash serait un pur bonheur... Un bel effort existe déjà avec la classe de Pavils Jurjans, portée en AS2 par par Joey Lott, mais c'est pas encore ca, notamment en terme de performances ... :)