Для этого можно использовать регулярное выражение при условии, что вы не вставляете свои утверждения. Например, если ваш stmt1 - это еще один случай, тогда все ставки отключены (вы не можете использовать регулярное выражение для чего-то подобного, вам нужен регулярный парсер).
Edit: Если вы действительно хотите попробовать его, вы можете сделать это с чем-то вроде (не проверял, но вы получите идею):
Regex t = new Regex(@"when\s+(.*?)\s+then\s+(.*?;)", RegexOptions.Singleline)
allMatches = t.Matches(input_string)
Но, как я сказал, что это будет работать только для не вложенных операторов.
Редактировать 2: Изменено некоторое регулярное выражение, чтобы включить точку с запятой в последней группе. Это не будет работать так, как вы хотели - вместо этого он даст вам несколько совпадений, и каждое совпадение будет представлять один , когда условие, с первой группой условие и второе группа заявление.
Я не думаю, что вы можете создать регулярное выражение, которое делает именно то, что вы хотите, но это должно быть достаточно близко (я надеюсь).
Edit 3: New регулярное выражение - должно обрабатывать несколько операторов
Regex t = new Regex(@"when\s+(.*?)\s+then\s+(.*?)(?=(when|end))", RegexOptions.Singleline)
Он содержит положительный предпросмотр так, что вторая группа совпадает с затем к следующему «когда» или «конец». В моем тесте он работал с этим:
case a
when cond1
then stmt1;
stm1;
stm2;stm3
when cond2
then stmt2;
aaa;
bbb;
end case;
Теперь это чувствительно к регистру для, так что если вам нужно случай нечувствительность вам нужно добавить соответствующий флаг регулярных выражений.
Я не думаю, что понимаю. Что ваш код должен делать с регулярными выражениями? – Grzenio
Я думал, что было бы проще получить все такие циклы/блоки с помощью регулярного выражения вместо обработки их традиционным способом программирования. Также я могу использовать такое регулярное выражение для анализа многих таких разных структур. – Archie
Я думаю, что вы должны написать парсер, разбор исходного кода с помощью регулярных выражений не будет работать. – Tomalak