我有示例C ++代码(http://pastebin.com/6q7zs7tc),我必须从中提取函数名称以及函数所需的参数数量。到目前为止,我已经写了这个正则表达式,但它并不适合我。
(?![a-z])[^\:,>,\.]([a-z,A-Z]+[_]*[a-z,A-Z]*)+[(]
答案 0 :(得分:3)
您无法使用正则表达式可靠地解析C ++。
实际上,您无法使用弱解析技术对其进行解析(请参阅Why can't C++ be parsed with a LR(1) parser?)。如果您希望从源文件中可靠地提取此信息,则需要经过时间考验的C ++解析器;见https://stackoverflow.com/a/28825789/120163
如果你不关心你的提取过程是否片状,那么你可以使用正则表达式,也许还有一些额外的hackery。启发式提取的关键问题是匹配各种括号,例如,[...],< ...> (这对班次运营商来说非常有用)和{......}。支架匹配要求您保留一堆看到的括号。在存在宏和预处理器条件的情况下,括号匹配可能会失败。