【发布时间】:2011-05-19 18:23:31
【问题描述】:
我正在寻找一个 RegEx,它可以找到其中没有 Case Else 的 Select Case 语句。
这是我到目前为止的想法
(?sm)^\s*Select Case.*(?<!^\s*Case Else.*)End Select
除了可能有嵌套语句的情况外,这个工作完美。
在尝试使用平衡组时,我想出了以下方法
Select Case(?>Select Case(?<DEPTH>)|End Select(?<-DEPTH>)|.?)*?(?(DEPTH)(?!))End Select
哪个正确找到选择案例/结束选择的平衡组,但我很难让它与 (?
这里有一些示例数据:
Select Case
Case :
Select Case
Case : Something
End Select
Case Else : SomethingElse
End Select
在这种情况下,它应该只匹配内部 Select Case,因为 Outter 有它的 Case Else
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 Else
【问题讨论】:
-
是否必须在单个 RegEx 中完成?
-
我希望有一个。但是,是的,如果情况变得更糟,我将使用代码中的循环深入研究它们。
标签: .net regex regex-group balancing-groups