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

时间:2010-03-11 11:22:58

标签: python regex

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

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

重点是匹配#define和最后})之间的所有内容,但我仍然无法弄清楚如何编写正则表达式。我需要它使用“re”模块使它在Python中工作。

有人可以帮帮我吗?

由于

3 个答案:

答案 0 :(得分:3)

这应该这样做:

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

(?:.*\\\r?\n)*匹配以反斜杠结尾的零行或多行,然后.*$匹配最后一行。

答案 1 :(得分:0)

我觉得这样的事情会奏效:

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

这假设您的宏都以'}'结尾,最后带有可选的')'。

答案 2 :(得分:0)

我认为以上解决方案可能不适用于:

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