C++ 与switch语句C++;

C++ 与switch语句C++;,c++,regex,C++,Regex,我正在尝试编写一个正则表达式模式,用于bash脚本,该脚本检查switch语句(C++)的语法 我想遵循的switch语句的语法如下 switch(expression) { case constant-expression: statement(s); break; // must be present case constant-expression: statement(s); break; // must be pres

我正在尝试编写一个正则表达式模式,用于bash脚本,该脚本检查
switch
语句(C++)的语法

我想遵循的
switch
语句的语法如下

switch(expression)
{
   case constant-expression:
       statement(s);
       break; // must be present
   case constant-expression:
       statement(s);
       break; // must be present

   ....
   ....

   default :  // must be present
       statement(s);
       break; // must be present
}
请注意,尽管
break
default
语句不是必须的,但我希望检查它们是否存在

我编写了这个正则表达式模式来匹配开关块

switch(.*)\n(\s)*?{(\n(.*))*?(\n(\s)*)case(.*):?(\n(.*))*?break;)+(\n(.*))?\n(\s)*(默认值:)(\n(\s)**)(break | return(.*);(\n(\s)*(.*))}

它成功地匹配了开关块,但问题是它匹配了
开关
,即使缺少break和default语句。我尝试将
+
操作符与
break
default
单词一起使用,但它们似乎不起作用

编辑更新:

是否可以使用解析器匹配如下开关块

switch (PC_INT[address.port][address.pin]) 
    {
    #if defined (__AVR_ATmega2560__) || defined(__AVR_AT90CAN128__)
        case EINT_0:
            // Mask the interrupt so it doesn't fire anymore, i.e put a zero in the mask register.
            EIMSK &= ~(1 << INT0);
            break;
        case EINT_1:
            EIMSK &= ~(1 << INT1);
            break;
            ....
        default:
            return GPIO_INT_OUT_OF_RANGE;

    #elif defined(__AVR_ATmega64M1__) || defined(__AVR_ATmega64C1__)
        case EINT_0:
            // Mask the interrupt so it doesn't fire anymore, i.e put a zero in the mask register.
            EIMSK &= ~(1 << INT0);
            break;
        case EINT_1:
            EIMSK &= ~(1 << INT1);
            break;
            ....    
        default:
            return GPIO_INT_OUT_OF_RANGE;
    #else
        #error "GPIO interrupts not implemented for this configuration."
    #endif
    }
交换机(PC_INT[address.port][address.pin])
{
#如果已定义(uu AVR_ATmega2560_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
案例编号0:
//屏蔽中断,使其不再触发,即在屏蔽寄存器中输入零。
EIMSK&=~(1非贪婪模式(如
*?
)不是魔法

显然,您期望
中的
*?
(\非贪婪模式(如
*?
)不是魔法


<>你显然希望<代码> >代码> >代码>(正则表达式不能匹配实际的或甚至非常简化的C++语法)。正则表达式不能匹配实际的或甚至非常简化的C++语法。
case 1:
  do_something();
case 2:
  do_something_else();
  break;
(default:)?