At 12:06 on déc 9 2007, Christophe Goessen said :

> Salut
> 
> Le 09/12/07, Sébastien Kirche <[EMAIL PROTECTED]> a écrit :
> > 
> > 
> > - "<titi>"
> > - "(.*)" : n'importe quel caractère (plusieurs fois ou pas du tout)
> >   et
> > on garde le contenu dans un groupe
> > - "<toto>"
> > 
> > 
> Le problème avec ta technique c'est que les expressions rationnelles
> essayent toujours de trouver la plus longue chaîne possible. Donc du
> coup sur un exemple du genre:"<titi> blabla <toto> <titi> blabla2
> <toto>" l'expression renverais la chaine entre le premier "<titi>" et
> le second "<toto>".

Exact. Je n'ai pas cherché bien loin si ma proposition collait à tous
les cas.

Mais le comportement d'attraper les chaînes les plus longues possibles
est parfois modifiable : on parle de regexp greedy ou lazy (non greedy).

Je sais qu'avec perl et emacs on ajoute un ? derrière * pour le cas que
tu évoques (attraper jusqu'au premier <toto>).

> Je crois que le plus simple, vu que le doc semble être du xml si je ne
> me trompe pas, c'est de ne pas faire apparaître le caractère '<' ou
> '>' mais plutôt leurs correspondant unicode "&lt;" et "&gt;".

Mais ça change quoi ? Tu recherche &lt; et &gt; au lieu des <> mais sur
le fond, la regexp est pareille. Ou un truc m'échappe.

Au passage &lt; et &gt; ne sont pas de l'unicode, ce sont des "entités"
html qui permettent de représenter ces caractères (ou d'autres comme les
accents, les crochets, le signe copyright, ...) sans problème d'encodage
ou d'erreur de syntaxe.
-- 
Sébastien Kirche
_______________________________________________
libre mailing list
[email protected]
http://graoulug.org/cgi-bin/mailman/listinfo/libre

Répondre à