我想了解使用正则表达式解析C ++代码的方法。目前我已经用Ruby编写了一些代码,可以提取类声明及其父类(如果有的话):
/(struct|class)\s+([^{:\s]+)\s*[:]?([^{]+)\s*\{/
这里是Rubular上的示例。请注意,我可以正确捕获“声明”和“继承”部分。
我卡住的地方是在于捕获类主体。如果我使用以下扩展原始正则表达式:
/(struct|class)\s+([^{:\s]+)\s*[:]?([^{]+)\s*\{[^}]*\};/
如果类的主体不包含任何大括号,那么我可以捕获该类的主体内容,但如果包含大括号,则无法捕获该类或函数定义。目前为止,我已经尝试了许多方法,但都没有取得更好的效果。
例如,如果我在正则表达式中包含主体可以包含大括号这一事实,它将捕获第一个类声明,然后将所有后续类作为第一个类的主体的一部分捕获!
我错过了什么?