Expressions régulière pour détecter une chaine de caractères
Par -Alexandre LEGOUT aka LAlex- le mardi, avril 27 2004, 16:16 - PHP - Lien permanent
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 :
un caractère de début (ici, la double quote ou la simple quote)
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
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 !
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 ... ![]()
Commentaires
on croise les doigts pour la prochaine version de flash
De toute façon, les expressions régulières, ça sert à rien alors....
Ok lol je sors, poussez pas
J'ai eu le même problème cette automne et je dois avouer que j'ai eu de la difficulté, mais moi c'était pour analyser des requête SQL. C'est très puissant les expressions régulières, mais bon c'est parfois aussi le genre de truc qui te fait casser la tête pendant quelques heures.
et si on commancait pas appeller les choses par leur nom en oubliant ce terme de 'régulière' et en le remplacant par la vrai traduction du mot 'regular' soit 'rationnel' en français.
on doit donc dire : expression rationelle et non plus expression régulière
merci ^^vv^^vv^^vv^^
ps: bravo j'suis content pour toi, belle expression
Et dire que c'est moi qui ait dit "c'est vachement puissant les expressions REGULIERES" (je suis belge et je dit réguliere et non rationnelle...). Moi, je suis subjugé par cette regex, elle me tue..., j'ai mis du temp à la comprendre ( à cause des caractère d'échapement du php...
Oui mais régulière, c'est plus joli
on la joue à la "régulière" ???

.... bon ok je sors aussi
salut

regular veut également dire régulier, donc on est pas dans le tort
A+
Et puis plus pragmatiquement, dans l'absolu on s'en fout, du moment que tout le monde comprend ce que c'est ...
Comme dit LAlex on s'en cogne un peu lol.
Et plus pragmatiquement, si y'en a qui comprennent pas, je connais quelqu'un qui a écrit un super cours sur les regex, ce tuto est parfait en tout point et les exemples d'une qualité exemplaire, looooool ok je sors, pas tapper aïe ouille, ha non pas le clavier, pas le clavier....hi hi hi hi hi hi
http://www.media-box.net/tuts.php?iddr=6785
ben justement, y a pas une tit explication rationnelle
> ok je sors
Le nom est loin d 'être si anodin puisque je ne voyais absolument pas ce que pouvait être une expression régulière avant qu'on m'en montre une.
Le terme anglais Regular signifie régulier dans le sens Français, générique. On parle par exemple pour les cordes de guitares de modèle regular, un modèle de corde qui convient à la plupart des cas. c'est ce sens du mot régulier qu'il faut comprendre.
Si on parle d'expression générique c'est tout de suite clair, une expression qui représente un ensemble de possibilité et suffit à elle seule à décrire toute ces possiblités.
Sauf que la tradition officielle française est expression rationelle.
Fil des commentaires de ce billet