2011-11-03 54 views
0

我有這樣的字符串:Java的正則表達式澄清

<RandomText> 
executeRule(x, y, z) 
<MoreRandomText> 

我想做到的是以下內容:如果在更大的文本塊中存在此executeRule串,我想獲得它的第2'參數。

我該怎麼做?

+0

將它始終有三個參數? –

+0

它總是有3個參數;參數也是字符串.... x,y,z可以從一個函數調用到另一個函數調用。 – Sergiu

+1

「x,y,** z **」或「x,y,** x **」?是一個區別! –

回答

2

你是什麼意思的更大的文本塊?

如果要提取從表達第二PARAM,它會像

executeRule\(\w+,\s*(\w+),\s*\w+\) 

第二個參數是舉行捕獲組$ 1中。

請記住,要在Java中使用此表達式,您需要轉義'\'。此外,我只是假設\ w足夠符合您的參數,這取決於您的特定規則。

如果你需要一些幫助,在Java中實際使用正則表達式,也有可以轉了,我發現這個教程是相當簡單的很多資源,它解釋了基本用法: http://www.vogella.de/articles/JavaRegularExpressions/article.html

2
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
... 
Pattern p = Pattern.compile("executeRule\\(\\w+, (\\w+), \\w+\\)"); 
Matcher m = p.matcher(YOUR_TEXT_FROM_FILE); 
while (m.find()) { 
    String secondArgument = m.group(1); 
    ...process secondArgument... 
} 

一旦此代碼執行secondArgument將包含值y。上面的正則表達式假定您期望參數由單詞字符組成(即小寫字母,數字和下劃線)。

Java字符串文字語法需要雙反斜槓,正則表達式引擎會看到單反斜槓。

如果你想因爲它是允許在大多數編程語言中,你可以使用下面的正則表達式,以允許在字符串中的空白:

Pattern p = Pattern.compile("executeRule\\(\\s*\\w+\\s*,\\s*(\\w+)\\s*,\\s*\\w+\\s*\\)");