2015-10-28 30 views
1

我有一個像下面爪哇 - 所有子對於給定的正則表達式

API:ADD|TYPE:ABC...MATCH:TRUE 

[LOTS OF OTHER LOG LINES] 

API:ADD|TYPE:ABC...MATCH:TRUE 

[LOTS OF OTHER LOG LINES] 

API:ADD|TYPE:DEF...MATCH:TRUE 

模式我試過以下的正則表達式:

(API:.*MATCH:(TRUE|FALSE)) 

while (matcher.find()) { 
    System.out.println(i + " occurence"); 
    i++; 
    matches.add(matcher.group()); 
} 

它從第一個「API」持續「TRUE匹配「因此只有一個子字符串被返回!我想要三個子字符串(在這種情況下)從「API」開始,直到「TRUE」或「FALSE」。

感謝您在這方面的幫助。謝謝。

編輯:

------------------------------------------------------- 
20:31:57 CALL add  35 
------------------------------------------------------- 
20:31:57 REASON API:ADD|TYPE:ABC|ErrorType:VALIDATION|Error Message:User already has|MATCH:FALSE 
+0

你需要知道你要多少組,正則表達式來捕捉。你預計你會有一個固定的號碼嗎? –

+0

你是如何閱讀輸入的?逐行?。或者所有這些行都在一個字符串中? – TheLostMind

+1

請向我們展示整個樣本行以及您想要提取的內容。 –

回答

1

使用非貪婪量詞.*?正則表達式將開始匹配儘可能少。

(API:.*?MATCH:(TRUE|FALSE)) 
1

這是因爲你用.*這是一個貪婪量詞。

您應該嘗試使用.*?這是勉強 - 這意味着它匹配儘可能最小的子字符串。

欲瞭解更多信息有關貪婪不願意這裏看到優秀的答案: Greedy vs. Reluctant vs. Possessive Quantifiers

相關問題