我想找到 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
- 文字字符序列