我想用正則表達式解析Obj-c源代碼。我想找到兩個聲明和實現。用正則表達式解析Obj-c方法
首先我尋找類是這樣的:
@implementation(.|\n)[email protected]
@interface(.|\n)[email protected]
然後,我有這些模式尋找實例方法類的範圍內:從
For interface: -.*;
For implementation: -.*{
然而事情:評論,字符串和數學運算也包括在內。
例子,其中這些模式失敗:
//I'm pretending to-be an instance method;
/*
Disabled methods:
- (void)myProgrammerDidntLikeMe;
*/
if (a + b == 2) { ... }
str = @"-----";
我怎樣才能讓圖案排除這些假裝對是方法,而且是有什麼別的我沒有預見?
更新:當試驗解析單個方法字符串時,我注意到我的模式也用於識別它們。這是我想出了:
(-|\+)\s\(([\w|\*|\s]*)\)(?:(?:(?:(\w*)(?:\:\([\w|\s|\*]*)\)(\w*)\s*){1,}))?(\w*)
但它不,不像我第一次嘗試找到沒有返回類型的方法。但是我沒有問題,因爲我從來沒有見過被使用過的人。
- noReturnType
我不知道有關的意見和IFS什麼,但是1)它很難用太糊弄比如數學運算和2)它也分析方法本身。
現在我稍微改變了我的問題,但我試圖實現這樣的捕獲組輸出,我不知道該如何去做。
1. -
2. void
FOLLOWING_CAN_REPEAT
3. setFoo:
4. Foo*
5. foo
END_REPEAT
如果你想做到這一點可靠,你不能用正則表達式。你打算怎麼處理#if?宏?頭文件?人們不斷學習這一課:正則表達式不能用於計算機語言的可靠處理。如果你不介意偶爾犯錯誤,你已經有了一個可行的解決方案。你可以修補這個到你的心中,它會改善但總是有一個根本的缺陷。如果你需要一個真正的Objective C解析器,我還有另一個答案。 – 2012-07-26 17:48:09
「我試圖用正則表達式解析Obj-c源代碼。」這聽起來對我來說是個壞主意。你確定這是最好的選擇嗎? – Hassan 2012-07-26 17:48:33
有關使用正則表達式解析代碼的一些建議:http://stackoverflow.com/q/1732348/1487063(我最喜歡的SO問題)。 – Dustin 2012-07-26 17:52:40