Es ist möglich, Regex zu verwenden, vorausgesetzt, Sie verschachteln Ihre Anweisungen nicht. Zum Beispiel, wenn Ihre Stmt1 eine andere Case-Anweisung ist, dann sind alle Wetten aus (Sie können Regex für so etwas nicht verwenden, Sie brauchen einen regulären Parser).
bearbeiten: Wenn Sie es wirklich wollen, um versuchen Sie es mit so etwas wie tun kann (nicht getestet, aber Sie bekommen die Idee):
Regex t = new Regex(@"when\s+(.*?)\s+then\s+(.*?;)", RegexOptions.Singleline)
allMatches = t.Matches(input_string)
Aber wie ich das gesagt wird nur für nicht funktionieren verschachtelte Anweisungen.
Bearbeiten 2: Ein wenig die Regex geändert, um das Semikolon in der letzten Gruppe aufzunehmen. Dies wird nicht funktionieren, wie Sie wollten - stattdessen gibt es Ihnen mehrere Übereinstimmungen und jede Übereinstimmung wird eine darstellen, wenn Bedingung, mit der ersten Gruppe die Bedingung und die zweite Gruppe die Aussage.
Ich glaube nicht, dass Sie eine Regex bauen können, die genau das tut, was Sie wollen, aber das sollte nahe genug sein (ich hoffe).
bearbeiten 3: New Regex - sollten mehrere Anweisungen
Regex t = new Regex(@"when\s+(.*?)\s+then\s+(.*?)(?=(when|end))", RegexOptions.Singleline)
Es enthält eine positive Vorschauhandhaben, so dass die zweite Gruppe von übereinstimmt dann auf die nächste 'wenn' oder 'Ende'. In meinem Test funktionierte es dies mit:
case a
when cond1
then stmt1;
stm1;
stm2;stm3
when cond2
then stmt2;
aaa;
bbb;
end case;
Es ist Groß- und Kleinschreibung für jetzt, wenn Sie also Groß- und Kleinschreibung müssen müssen Sie den entsprechenden regex Flag hinzuzufügen.
Ich glaube nicht, dass ich verstehe. Was hat dein Code mit Regexes zu tun? – Grzenio
ich dachte, es wäre einfacher, alle solche Schleifen/Blöcke mit Regex zu bekommen, anstatt sie durch traditionelle Programmierung Weg zu verarbeiten.Auch kann ich solche Regex verwenden, um viele solcher unterschiedlichen Strukturen zu analysieren. – Archie
Ich denke, Sie sollten einen Parser schreiben, Parsing Quellcode mit regulären Ausdrücken allein wird nicht funktionieren. – Tomalak