1
我想找到一個正則表達式來匹配C++頭文件中的非虛擬的方法聲明。我在大多數情況下都能正常工作,但是如果在虛擬之後有一個換行符,並且方法聲明在下一行,我的正則表達式就會匹配它,這不是我想要的。因此,我需要正則表達式引擎回溯到上一行並檢查虛擬關鍵字。這裏有一個簡單的例子:匹配正則表達式模式匹配非虛擬的C++方法聲明
源文件片段:
void Process(char* name, int val); // Should match, this one works
virtual char* GetName(); // Should not match since it is virtual, this one works
virtual
flag_type SetValue(uint8 resourceIndex, char* name); // Should not match, but this line matches since virtual is on previous line!
這裏是我的正則表達式表達: (^\s*\w+\**(?<!virtual)\s+\w+\s*\()(\s*\w+\**\s+\**\w+,?)*\s*\)\s*;
您的想法存在一個邏輯缺陷:您認爲每個聲明至少需要一行,但事實並非如此。如果你有'void x(); void y();'在同一行上,這在C++中是完全可以接受的,你只會識別第一個函數,而不是第二個函數。 – 2012-04-27 17:39:24
感謝您的輸入。我意識到這在任何情況下都行不通,並且不必,但我試圖讓這個例子變得簡單。忽略這個缺陷,如何在前一行的virtual關鍵字前面使正則表達式不匹配? – timohayes 2012-04-27 17:59:29
我發現了一些適用於我的東西,包括Emanuele指出的缺陷(儘管它也會在註釋行中匹配): '\ b(?<!virtual \ s +)\ w + \ ** \ s + \ w + \ S * \((\ S * \ W + \ ** \ S + \ ** \ W + ,?)* \ S * \)\ S *;' – timohayes 2012-04-27 18:31:34