At 20:22 on déc 8 2007, David VANTYGHEM said :
> Re,
Salut,
> Un petit coup de main de la part des dieux des expressions
> rationnelles serait le bienvenue. Voilà, par exemple, lorsque je
> cherche une chaîne de caractère compris entre <toto> et <titi>, je
> peux écrire : <toto>[^<]<titi> Ce qui signifie en gros : Trouver tous
> les caractères situés après <toto>, jusqu'à ce qu'il y ait un
> caractère < puis <titi>.
Pas tout à fait : la regexp que tu indiques cherche
- "<titi>"
- "[^<]" : n'importe quel caractère (un seul caractère) qui n'est pas
"<"
- "<toto>"
> Oui, mais voilà, si le caractère < existe dans la chaîne de caractères
> comprise entre <toto> et <titi>, ça ne marche pas. Par exemple,
> appliquer mon expression rationnelle sur la chaîne
> "<toto>Mandriva>Debian<titi>" me retournera que dalle. En fait, je
> cherche à écrire : Trouver tous les caractères situés après <toto>,
> jusqu'à ce qu'il y ait <titi>. Comment faire cela?
Ça dépend du logiciel ou de la commande que tu utilises et de ce que tu
veux faire. grep / sed, awk, perl, emacs, la plupart des langages de
script permettent cela avec parfois de petites variantes dans la
syntaxe. Il y a un bon bouquin chez O'Reilly sur le sujet qui couvre la
plupart des variantes (sauf Emacs il me semble, mais la doc d'Emacs est
suffisante).
Une solution peut être d'utiliser les groupes dans la regexp, ça permet
de spécifier ce qui vient avant et après ce que tu cherche, sans
l'inclure dans le résultat. Par exemple : <titi>(.*)<toto>
- "<titi>"
- "(.*)" : n'importe quel caractère (plusieurs fois ou pas du tout) et
on garde le contenu dans un groupe
- "<toto>"
Il est aussi possible de faire du remplacement avec les groupes et le
contenu des groupes est adressable par leur numéro (\1 pour le premier
groupe, \2 pour le second, etc)
Avec certaines syntaxes il faut échapper les parenthèses (dans Emacs où
j'ai expérimenté la regexp il faut écrire <titi>\(.*\)<toto>
Pour info je me suis aussi servi de ça dernièrement dans MS Visual
Studio et dans des scripts vbs, les groupes se délimitent par {}
HTH...
--
Sébastien Kirche
_______________________________________________
libre mailing list
[email protected]
http://graoulug.org/cgi-bin/mailman/listinfo/libre