Envoyé par
arnopub
Je ne vois pas comment récupérer la chaine imbriquée.
C'est possible, mais il faut s'accrocher un peu... Voilà quelques ressources à ce sujet (en anglais) :
http://www.rassoc.com/gregr/weblog/2...r-expressions/
http://www.m-8.dk/resources/RegEx-ne...tructions.aspx
http://www.oreilly.com/catalog/regex2/chapter/ch09.pdf (extrait de ce livre)
Si on applique ce qui est raconté dans ces articles, on peut écrire la regex suivante :
{(?>[^{}]+|{(?<DEPTH>)|}(?<-DEPTH>))*(?(DEPTH)(?!))}
(oui je sais, ça pique les yeux )
Cette expression aussi ne renvoie que 2 chaines... mais pas les mêmes :
{coucou|hello|hi}
{deux|{trois|neuf}|rrr|rrr}
Mais comme cette fois ce sont les accolades les plus externes, tu peux toujours appliquer récursivement la regex à chaque capture pour récupérer les chaines imbriquées...
Pour faire des tests sur les regex, je te conseille vivement d'utiliser Expresso, c'est quand même beaucoup plus pratique que de tester dans un programme que tu dois recompiler à chaque fois
EDIT: il y a aussi un exemple dans la MSDN :
http://msdn.microsoft.com/en-us/library/bs2twtah.aspx
Partager