正则表达式,用于在C ++代码中查找类声明

时间:2009-10-20 22:06:08

标签: c++ regex

我需要一个正则表达式来查找类声明,这样我就可以在“class”关键字之前添加一个#define。正则表达式不一定非常完美,只是足以捕获大多数情况。

4 个答案:

答案 0 :(得分:3)

/.*class\s+([^{]+)\s*[:]?([^{]+){/

这适用于大多数类定义,包括模板类。类名以1美元为单位,如果是派生类,则基数为2美元。

答案 1 :(得分:2)

怎么样:

/^\s*class\s/

这应该运作得相当好。我不太确定。

答案 2 :(得分:2)

/class\s+([^\s]+)/

这会将类名捕获为$ 1(或者在您正在使用的任何正则表达式框架中的等价物)。这将适用于<>内可能包含空格的模板类在类名后面。解析这是正则表达式无法实现的,因为它需要匹配平衡的尖括号对。

答案 3 :(得分:1)

Yannick的回答主要涵盖了它,但不幸的是它也与前向声明(以及它们下面的后续文本)和严格的枚举(即enum class myStrictEnum { // stuff };

相匹配)

这种方法效果很好并且足够严格,但可能比它需要的更冗长。

^(?!enum).*class\b\s\b[A-Za-z_][A-Za-z_0-9]*\b\s*($)?(|:\s*($)?(public|private|protected)\s*($)?\b[^{]*\s*)\s*($)?{