如何将C函数原型和变量定义与regexp匹配?

如何将C函数原型和变量定义与regexp匹配?,c,regex,doxygen,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 及 所有的变化,你可以在C 我能用一个regexp

以前有人问过这个问题,但我有一个专门的例子,我应该能够用正则表达式处理它

我正在尝试从Doxygen读取警告日志,源代码是C(到目前为止,我害怕考虑C++)

我需要匹配日志中的函数和变量定义,并选择函数和变量名

更具体地说,日志中有如下行

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

所有的变化,你可以在C

我能用一个regexp匹配这些吗?或者我甚至不需要麻烦?括号中“parameter”(我松散地使用它也包括变量)列表后面的单词是一组特定的单词(函数、变量、枚举等),因此如果没有其他帮助,我可以匹配这些单词,但我宁愿不要在日志中看到某些类型

我目前的尝试看起来像

'(?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'
”(?P.+):\d+:\s+警告:\s+Member\s+(?P.+)([\(\**)\s*\w+([,)])[\)\])*\s+(?P.+)\)文件的\s+(?P.+)\s+未记录
(我使用Python的re包。)

但它仍然无法捕捉到一切


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

您允许在
之间进行零次或多次匹配。请尝试以下操作:

'(?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'
”(?P.+):\d+:\s+警告:\s+成员\s+(?P\w+).*\s+\(?P\w+)\)文件\s+(?P.+)\s+未记录

您能提供一个未捕获的警告示例吗?我可以捕获这些警告,但上面示例中的函数和变量名解析不正确。也就是说,名称有时包含括号或括号内的内容。
'(?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'