匹配C语言多行预处理语句的正则表达式

4 投票
3 回答
1056 浏览
提问于 2025-04-15 20:18

我需要的是匹配多行预处理器的语句,比如:

#define max(a,b) \
       ({ typeof (a) _a = (a); \
           typeof (b) _b = (b); \
         _a > _b ? _a : _b; })

关键是要匹配从 #define 到最后一个 }) 之间的所有内容,但我还是不知道怎么写正则表达式。我需要它在Python中工作,使用“re”模块。

有人能帮我吗?

谢谢

3 个回答

0

我觉得上面的解决方案可能不适用于:

#define MACRO_ABC(abc, djhg) \
do { \
  int i; \
  /*
   * multi line comment 
   */ \
  (int)i; \
} while(0);
0

我觉得像这样应该可以工作:

m = re.compile(r"^#define[\s\S]+?}\)*$", re.MULTILINE)
matches = m.findall(your_string_here)

这段代码假设你的宏(也就是一些预定义的代码块)都是以'}'结尾的,最后可以选择加一个')'。

5

这样做就可以了:

r'(?m)^#define (?:.*\\\r?\n)*.*$'

(?:.*\\\r?\n)* 这个部分可以匹配零行或多行以反斜杠结尾的内容,然后 .*$ 会匹配最后一行的内容。

撰写回答