C++ 在C+中查找类声明的正则表达式+;代码
我需要一个正则表达式来查找类声明,以便在“class”关键字之前添加一个#define。正则表达式不必是完美的,只要足够好,就可以捕获大多数情况。怎么样:C++ 在C+中查找类声明的正则表达式+;代码,c++,regex,C++,Regex,我需要一个正则表达式来查找类声明,以便在“class”关键字之前添加一个#define。正则表达式不必是完美的,只要足够好,就可以捕获大多数情况。怎么样: /^\s*class\s/ 这应该相当有效。我不太确定 /class\s+([^\s]+)/ 这将把类名捕获为$1(或您正在使用的任何regex框架中的等效名称)。对于在类名称后面的中可能有空格的模板类,这将不起作用。解析正则表达式是不可行的,因为它需要匹配平衡的尖括号对 /.*class\s+([^{]+)\s*[:]?([^{]+){
/^\s*class\s/
这应该相当有效。我不太确定
/class\s+([^\s]+)/
这将把类名捕获为$1(或您正在使用的任何regex框架中的等效名称)。对于在类名称后面的中可能有空格的模板类,这将不起作用。解析正则表达式是不可行的,因为它需要匹配平衡的尖括号对
/.*class\s+([^{]+)\s*[:]?([^{]+){/
这适用于大多数类定义,包括模板类。类名在$1中捕获,如果它是派生类,则基类将在$2中。Yannick的回答主要涉及它,但不幸的是,它还匹配转发声明(以及它们下面的后续文本)和严格枚举,即
枚举类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*($)?{
正则表达式应该匹配整个(可能是多行)声明,还是只匹配class关键字?后者很容易得到大部分正确答案;对于前者,正则表达式可能是错误的工具。