我想找到某个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.(\r\n|\r|\n)?
我不知道如何处理指令之间的任意行数。
答案 0 :(得分:1)
你可以在这里使用一个驯化的贪婪令牌解决方案:
#if defined..?my_define\b(?:(?!#(?:end)?if)[\s\S])*#else(?:(?!#(?:end)?if)[\s\S])*#endif
请参阅regex demo
<强>详情:
#if defined
- 一个litla char序列..?
- 除了换行符之外的任何1或2个字符my_define\b
- 整个字my_define
(?:(?!#(?:end)?if)[\s\S])*
- 匹配任何不是#endif
或#if
文字字符序列起点的字符的驯化贪婪令牌 #else
- 文字字符序列(?:(?!#(?:end)?if)[\s\S])*
- 与上述相同#endif
- 文字字符序列