2010-03-11 3 views
3

ce que je dois est de faire correspondre les déclarations de multiligne préprocesseur tels que:Expression régulière pour correspondre aux déclarations de préprocesseur multilignes de C

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

Le point est de faire correspondre tout entre #define et dernier }), mais je ne peux toujours pas comprendre comment écrire l'expression rationnelle. J'en ai besoin pour le faire fonctionner en Python, en utilisant le module "re".

Quelqu'un pourrait m'aider s'il vous plaît?

Merci

+0

Quelle saveur regex travaillez-vous? –

+0

Je l'ai besoin pour le faire fonctionner dans le script de Python, en utilisant "re" module ... – Martin

Répondre

3

Cela devrait le faire:

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

(?:.*\\\r?\n)* correspond à zéro ou plusieurs lignes se terminant par des barres obliques inverses, puis .*$ correspond à la dernière ligne.

+0

Fonctionne bien, merci! – Martin

+1

Réponse sous-appréciée :-) –

0

Je pense que quelque chose comme cela va fonctionner: à la fin

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

Cela suppose que vos macros toutes les extrémités avec « } », avec une option «) ».

0

Je pense que ci-dessus solution pourrait ne pas fonctionner pour:

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

pourriez-vous s'il vous plaît expliquer ab bit ce que le code fait réellement? – loki

Questions connexes