2011-09-15 54 views
0

我使用linux上的ctags爲使用vim和Tlist插件的源代碼創建標籤。當前用於PHP的ctags函數解析是可悲的,所以我已經下載了ctags和im的源代碼去改變解析函數的正則表達式。使用PHP regex從PHP源碼解析函數名稱?

因爲我正在處理很多以多種不同方式聲明函數的代碼,所以我需要一個正則表達式來可靠地解析函數名。

你有一個可以共享的解析一個源代碼行的PHP函數名稱?

這是當前修補和「改進的」一個從其中錯過許多功能,特別是那些標記爲finalstatic第一CTAGS源。

(^[ \t]*)(public[ \t]+|protected[ \t]+|private[ \t]+)?(static[ \t]+)?function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*) 
+0

您所有的'[\ t]'應該是'\ S +'。 'public \ n function'完全有效。 – meagar

+0

這不是我的來源,我正在努力尋找更強大的解決方案。我雖然在寫一個怪物之前會問; –

+1

爲什麼你不使用反射? – Gordon

回答

1

只是將靜態和最終添加到可能的單詞列表忽略,並使其匹配多個關鍵字之一足夠接近?

(^[ \t]*)((public|protected|private|static|final)[ \t]*)*function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*) 

將意味着它會接受垃圾像「公共公共靜態最終功能僞造()」,但PHP的語法檢查會拒絕它,因此應該不會有顯著的問題。

0
s/^.*\sfunction\s([^\(]*)\(.*$/\1/i 

我測試了一些sed的

grep -Ri function *| head -10 | sed 's/^.*\sfunction\s\([^\(]*\)(.*$/\1/i' 
+0

你只想要功能名稱權利? –

+0

是的,只是功能名稱。這幾乎是我想出來的,我認爲前面的關鍵字只是會被忽略,只是檢查任何東西。 –