2012-04-16 41 views
0

我想下面的查詢,但沒有成功如何使用引用來查找所有Java方法調用的實例?

grep -nr "[[:alnum:]]+\.[[:alnum:]]+\(\)" . 

所以,按照我的邏輯,一個方法調用是一個或多個字母數字字符

[[:alnum:]]+ 

後面跟着一個點

\. 

後跟一個或多個字母數字字符

[[:alnum:]]+ 

其次paranthesis(僅適用於返回類型爲void)

\(\) 

但此查詢是行不通的。如何編寫這樣的查詢?

+0

一個方法調用可能沒有點'.'如果調用方法是相同的類的一部分。 – anubhava 2012-04-16 19:43:28

+0

@anubhava是的,你是對的。我目前對使用引用調用的那些實例感興趣。我修改了問題標題。 – CodeBlue 2012-04-16 19:46:39

回答

1

grep提供了幾種類型的正則表達式語法。
您的模式是擴展語法,並與-E
extended-regexp一起使用有一個更容易/更好的語法,並且perl-regexp是,非常強大。

  • -E,--extended-regexp的
  • -F,--fixed串
  • -G,--basic-regexp的(缺省設置)
  • -P,--perl-正則表達式

grep -nrE "[[:alnum:]]+\.[[:alnum:]]+\(\)" . 
1

您需要使用「\ +」而不是「+」,否則它將直接匹配字符「+」。

+0

謝謝你。爲什麼我不需要使用反斜槓*,但需要使用反斜槓+? – CodeBlue 2012-04-16 19:49:06

+1

只是一個猜測:*比*更基本,因爲你可以更容易地使用前者(以及關於正則表達式的理論論文全部使用*)來實現後者。符號*從第一版開始就有grep,但爲了方便起見,\ +可能會在更高版本的grep中添加。它會被轉義,以免破壞已經使用+作爲文字匹配的現有正則表達式。 – sigfpe 2012-04-16 20:04:09

相關問題