我们需要根据一些业务规则识别并处理代码中的switch/case语句。
典型的switch语句:
switch (a)
{
case "A":
case "B":
result = "T";
result1 = "F";
default:
result = "F";
}
我已经能够创建两个模式来匹配第一步中的开关主体和第二步中的大小写标签和主体,但是我正在寻找一个单一的正则表达式,它将允许我提取大小写标签和主体。
我们没有嵌套开关。
此致,
3条答案
按热度按时间qqrboqgw1#
由于switch语句可以嵌套,传统的正则表达式无法处理它们(见鬼,即使
{}
可以嵌套也会破坏它们)。正则表达式只能解析Regular Languages。您需要某种形式的解析器来解析不规则的语言。这取决于您使用的语言(它看起来像C,但很多事情也是如此),可能已经有了可以使用的解析器(比如用于C的Sparse)。z4iuyo4d2#
这里有一些东西可以开始,但它远非完美-表达式不识别默认值和switch语句的结尾(可能还包括一些其他错误)。
如果主体包含
case
作为字符串或标识符的一部分,则它也将失败。slsn1g293#
Chas. Owens的评论是正确的。但是对于简单的情况,你可以使用下面的正则表达式:
要使用它,你正在使用的正则表达式引擎应该支持显式的多个命名捕获和look-aheads(如.NET正则表达式引擎).注意,除了命名组之外,所有组都可以设置为非捕获,但为了使正则表达式更容易理解,我没有在组开始处添加“?:“来使它们成为非捕获组.
然后,您将通过以下捕获为每个识别的
switch
语句获取一个匹配项:case和body总是成对出现,这样您就可以通过捕获进行枚举。