Регулярное выражение для соответствия многострочным операторам препроцессора C - PullRequest
3 голосов
/ 11 марта 2010

мне нужно сопоставить многострочные операторы препроцессора, такие как:

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

Смысл в том, чтобы сопоставить все между #define и последним }), но я все еще не могу понять, как написать регулярное выражение. Мне нужно, чтобы он работал в Python, используя модуль «re».

Может ли кто-нибудь помочь мне, пожалуйста?

Спасибо

Ответы [ 3 ]

3 голосов
/ 11 марта 2010

Это должно сделать это:

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

(?:.*\\\r?\n)* соответствует нулю или более строк, заканчивающихся обратным слешем, тогда .*$ соответствует последней строке.

0 голосов
/ 21 января 2017

Я думаю, что вышеупомянутое решение может не работать для:

#define MACRO_ABC(abc, djhg) \
do { \
  int i; \
  /*
   * multi line comment 
   */ \
  (int)i; \
} while(0);
0 голосов
/ 11 марта 2010

Я думаю, что-то вроде этого будет работать:

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

Предполагается, что все ваши макросы заканчиваются на '}', с необязательным ')' в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...