Il est possible d'utiliser regex pour cela à condition de ne pas imbriquer vos instructions. Par exemple si votre stmt1 est une autre déclaration de cas, alors tous les paris sont désactivés (vous ne pouvez pas utiliser regex pour quelque chose comme ça, vous avez besoin d'un analyseur régulier).
Modifier: Si vous voulez vraiment essayer, vous pouvez le faire avec quelque chose comme (non testé, mais vous voyez l'idée):
Regex t = new Regex(@"when\s+(.*?)\s+then\s+(.*?;)", RegexOptions.Singleline)
allMatches = t.Matches(input_string)
Mais comme je le disais cela ne fonctionnera que pour ne pas déclarations imbriquées.
Édition 2: Modification de l'expression régulière pour inclure le point-virgule dans le dernier groupe. Cela ne fonctionnera pas comme vous le vouliez - à la place, il vous donnera plusieurs correspondances et chaque correspondance représentera un lorsque la condition, avec le premier groupe de la condition et la seconde groupe la déclaration.
Je ne pense pas que vous puissiez construire une regex qui fasse exactement ce que vous voulez, mais cela devrait être assez proche (j'espère).
Edit 3: New regex - doit gérer plusieurs déclarations
Regex t = new Regex(@"when\s+(.*?)\s+then\s+(.*?)(?=(when|end))", RegexOptions.Singleline)
Il contient une positive afin que préanalyse le deuxième groupe correspond de puis à l'autre 'quand' 'fin' ou. Dans mon test, il a travaillé avec ceci:
case a
when cond1
then stmt1;
stm1;
stm2;stm3
when cond2
then stmt2;
aaa;
bbb;
end case;
Il est sensible à la casse pour l'instant, donc si vous avez besoin la casse vous devez ajouter le drapeau correspondant regex.
Je ne pense pas comprendre. Quel est votre code à utiliser avec les regex? – Grzenio
Je pensais qu'il serait plus facile d'obtenir toutes ces boucles/blocs en utilisant regex au lieu de les traiter par le biais de la programmation traditionnelle. De plus, je peux utiliser une telle regex pour analyser de nombreuses structures différentes. – Archie
Je pense que vous devriez écrire un analyseur, l'analyse du code source avec des expressions régulières seul ne fonctionnera pas. – Tomalak