Я ищу RegEx, который найдет утверждения Select Case, в которых нет Case Else.
Вот что я придумала до сих пор
(?sm)^\s*Select Case.*(?<!^\s*Case Else.*)End Select
Этот работает отлично, за исключением случаев, когда могут быть вложенные операторы.
, пытаясь использовать группы баланса, я придумал следующее
Select Case(?>Select Case(?<DEPTH>)|End Select(?<-DEPTH>)|.?)*?(?(DEPTH)(?!))End Select
Что правильно находит сбалансированные группы Select Case / End Selects, но мне трудно заставить его работать с (?
Вот некоторые примеры данных:
Select Case
Case :
Select Case
Case : Something
End Select
Case Else : SomethingElse
End Select
В этом случае он должен совпадать только с внутренним регистром выбора, потому что у ауттера есть его регистр.
Select Case
Case :
Select Case
Case : Something
Case Else : SomethingElse
End Select
End Select
Должен совпадать с целым блоком, потому что у внутреннего есть Else, а у внешнего нет.
Select Case
Case :
Select Case
Case : Something
Case Else : SomethingElse
End Select
Case Else : SomethingElseOutter
End Select
Не должно совпадать, потому что как у внутреннего, так и у внешнего выбора есть Case Case Else