2011-11-03 29 views
0

因此,我現在編寫一個ruby腳本來解析出給我的列表中的方法名稱,然後在.class文件上運行javap。我有一種感覺,正則表達式(正則表達式)是實現這一目標的唯一方式,但在嘗試此操作之前我想要社區輸入。用ruby解析javap的方法名稱

因此,例如,下面的方法是給我的的javap:

public String foo() 
public int bar() 

我只希望foo和從該名單吧,我將如何去獲取這些只?正則表達式是最好的方式?

回答

1

我認爲scan以積極前瞻(用於左括號)應該做的伎倆:

method_names = s.scan(/\w+(?=\s*\()/) 

例如:

>> "public String foo()\npublic int bar(int)".scan(/\w+(?=\s*\()/) 
=> ["foo", "bar"] 

這是假設的Ruby 1.9和Java方法名稱將僅包含AZ,az,0-9和「_」。替換\w更廣泛的內容(例如\p{Word})將允許名稱爲µü等的方法。

+0

好的,我比我的解決方案更喜歡這個。 –

0

像下面這樣的東西?

/[\w ]+ (.*)\(.*\)/ 

這將匹配任何1個或多個單詞字符(A-Z,A-Z,數字和_)以及一個空格,後面跟一個空格和一個詞,再接任何括號(.*)。方法名稱本身將位於第一個捕獲組($1)。

http://www.rubular.com/r/5wKuYf4p1S

+0

其實「\ w」會比[a-zA-Z_]更匹配 – Eder

+0

對,我忘了數字,謝謝。 –

+0

沒有問題,我試圖指出的是,紅寶石「\ w」不僅會匹配[a-zA-Z0-9_],還會匹配像▼áííóú... – Eder