如何使用正则表达式匹配C函数原型和变量定义?

时间:2011-10-11 13:22:10

标签: c regex doxygen

以前曾经问过,但我有一个专门的案例,我应该能够用正则表达式处理。

我正在尝试从Doxygen读取警告日志,而源代码是在C中(到目前为止,我还不敢考虑C ++)。

我需要匹配该日志中的函数和变量定义,并获取函数和变量名称。

更具体地说,日志有像

这样的行
/home/me/blaa.c:10:Warning: Member a_function(int a, int b) (function) of file blaa.c is not documented

/home/me/blaa.h:10:Warning: Member a_variable[SOME_CONST(sizeof(SOME_STRUCT), 64)*ANOTHER_CONST] (variable) of file blaa.h is not documented

您可以在C ...中找到所有变化。

我可以匹配只有一个正则表达式的那些或者我是否应该打扰?在括号中的“参数”(我松散地使用它也包括变量)列表中的单词是一组特定的单词(函数,变量,枚举等),所以如果没有别的帮助,我可以匹配那些但我如果有类型的话,我还没有在日志中看到过。

我目前的尝试看起来像是

'(?P<full_path>.+):\d+:\s+Warning:\s+Member\s+(?P<member_name>.+)([\(\[](\**)\s*\w+([,)])[\)\]))*\s+\((?P<member_type>.+)\) of file\s+(?P<filename>.+)\s+is not documented'

(我使用Python的重新包。)

但它仍然无法捕捉到一切。

编辑:我在上一次编辑中遇到了一些错误。

1 个答案:

答案 0 :(得分:1)

您允许在<member_name><member_type>之间进行零次或多次匹配。试试这个:

'(?P<full_path>.+):\d+:\s+Warning:\s+Member\s+(?P<member_name>\w+).*\s+\((?P<member_type>\w+)\) of file\s+(?P<filename>.+)\s+is not documented'