正则表达式表示 C 预处理器指令中 #else 情况



我想找到 C 预处理器定义的某些#else情况。

例:

#if defined(my_define)
// multiple 
// lines 
// of 
// code
#else
// multiple 
// lines 
// of 
// code
#endif

#if defined (my_define)
// same as above from here 

但我不想在没有#else的情况下匹配案例:

#if defined(my_define)
// multiple 
// lines 
// of 
// code
#endif

我不关心嵌套的#if,只关心上面的情况。

我尝试从

defined..?my_define.(rn|r|n)?

我不知道如何处理指令之间的任意行数。

您可以在此处使用温和的贪婪令牌解决方案:

#if defined..?my_defineb(?:(?!#(?:end)?if)[sS])*#else(?:(?!#(?:end)?if)[sS])*#endif

查看正则表达式演示

详情

  • #if defined- 字字字符序列
  • ..?- 除换行符字符以外的任何 1 或 2 个字符
  • my_defineb- 一个完整的单词my_define
  • (?:(?!#(?:end)?if)[sS])*- 与任何不是#endif或文字字符序列起点的字符匹配的#if婪令牌
  • #else- 文字字符序列
  • (?:(?!#(?:end)?if)[sS])*- 同上
  • #endif- 文字字符序列

最新更新