2009-10-20 57 views
2

我需要一個用於查找類聲明的正則表達式,所以我可以在「class」關鍵字前添加#define。正則表達式不一定非常完美,只要能夠捕捉大部分情況即可。在C++代碼中查找類聲明的正則表達式

+0

正則表達式應該匹配整個(可能是多行)聲明,還是隻匹配class關鍵字?後者很容易得到正確的;對於前者,正則表達式可能是錯誤的工具。 – 2009-10-20 22:29:46

回答

2

如何:

/^\s*class\s/ 

這應該很好地工作。我不太確定。

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

這將捕獲類名爲$ 1(或任何正則表達式框架您使用的等價物)。這將爲而不是適用於類名後面可能有空格<>的模板類。解析對於正則表達式來說是不可行的,因爲它需要匹配平衡的尖括號對。

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

這應該適用於大多數類定義,包括模板類。類名稱在$ 1中捕獲,如果它是派生類,則基數將在$ 2中。

1

雅尼克的回答大多覆蓋它,但它也不幸匹配前置聲明(以及隨後的文本在它們下面)和嚴格的枚舉即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*($)?{