匹配C语言多行预处理语句的正则表达式
我需要的是匹配多行预处理器的语句,比如:
#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)*
这个部分可以匹配零行或多行以反斜杠结尾的内容,然后 .*$
会匹配最后一行的内容。