用于从 C++ 代码中提取函数的正则表达式
Regex for extracting functions from C++ code
我有示例 C++ 代码 (http://pastebin.com/6q7zs7tc),我必须从中提取函数名称以及函数所需的参数数量。到目前为止,我已经编写了这个正则表达式,但它对我来说并不完美。
(?![a-z])[^\:,>,\.]([a-z,A-Z]+[_]*[a-z,A-Z]*)+[(]
您无法使用正则表达式可靠地解析 C++。
其实用弱解析技术是无法解析的(见Why can't C++ be parsed with a LR(1) parser?). If you expect to get extract this information reliably from source files, you will need a time-tested C++ parser; see
如果您不关心您的提取过程不稳定,那么您可以使用正则表达式,也许还可以使用一些额外的 hackery。启发式提取的关键问题是匹配各种括号,例如 [...]、< ... >(这对移位运算符不太适用)和 { ... }。括号匹配要求您保留一堆看到的括号。在存在宏和预处理器条件的情况下,括号匹配可能会失败。
我有示例 C++ 代码 (http://pastebin.com/6q7zs7tc),我必须从中提取函数名称以及函数所需的参数数量。到目前为止,我已经编写了这个正则表达式,但它对我来说并不完美。
(?![a-z])[^\:,>,\.]([a-z,A-Z]+[_]*[a-z,A-Z]*)+[(]
您无法使用正则表达式可靠地解析 C++。
其实用弱解析技术是无法解析的(见Why can't C++ be parsed with a LR(1) parser?). If you expect to get extract this information reliably from source files, you will need a time-tested C++ parser; see
如果您不关心您的提取过程不稳定,那么您可以使用正则表达式,也许还可以使用一些额外的 hackery。启发式提取的关键问题是匹配各种括号,例如 [...]、< ... >(这对移位运算符不太适用)和 { ... }。括号匹配要求您保留一堆看到的括号。在存在宏和预处理器条件的情况下,括号匹配可能会失败。