gribouillé 20-01-2006 à 00:52:48
Expression régulière incompréhensible
Dans les expressions régulière, il y a une chose que j'ai mis longtemps avant de trouver comment faire : c'est dire l'absence d'un motif caractérisé par une sous expression régulière.
Attention, les âmes sensibles qui croient qu'une "expresion régulière" est un terme littéraire ou gastronomique, ne lisez surtout pas plus bas au risque de faire exploser vos neurones !
En effet, si c'est facile d'indiquer la non présence d'un caractère ou d'un ensemble de caractère par [^a-z]* par exemple, je ne savais pas comment dire : à tel endroit de l'expression, je veux que un motif défini par une sous expression ne puisse pas apparaitre.
J'ai fini par trouver dans un forum, mais si je sais appliquer la solution, la lecture de la formule me plonge toujours dans un état dont l'incertude intellectuelle oscille entre la méditation zen et le désespoir d'un mauvais élève.
Donc la solution :
(?:(?!expression).)
Pour remplacer par exemple tous les & par des & sauf les"&" qui servent déjà à coder un caractère html comme & lui même mais aussi < par exemple ; je veux pouvoir dire : 'tous les & sauf ceux suivis par [a-z]+;
Et bien voici l'expression régulière :
/&(?:(?![a-z#]+;).)/
Et voici la formule en php par exemple :
$t=preg_replace('/&(?:(?![a-z#]+;).)/','&\1',$t);
C'est poétique, non ?
Réactions
1. Gand' le 20-01-2006 à 08:01:57
joli morceau ...
les eregs, c'est vraiement toujours un poeme !!!
2. aigritude le 20-01-2006 à 12:22:17
Bande de dingues
3. Marielle le 20-01-2006 à 21:16:48
Moi, j'ai tout compris !
4. legolas le 21-01-2006 à 16:05:16
Marielle est notre geekette !
Sérieux, la soluce n'est dans aucun des manuels php ou perl ou sed que j'ai lus. Si qqun trouve des cours avancés de regexp qui expliquent ce genre de syntaxe, je uis preneur !
5. Marielle le 22-01-2006 à 10:15:50
Je vais demander aux Master 1 s'ils ont eu ça dans leurs cours de PHP.
6. legolas le 26-01-2006 à 14:29:04
alors ?
7. Marielle le 26-01-2006 à 17:04:40
Ben je ne les vois plus que le mardi (fichu stage qui m'empêche de les voir à la fac) et mardi, j'ai oublié !
8. legolas le 26-01-2006 à 22:38:43
pas grave