2017-05-16 39 views
1

「5:無效的號碼:123 *** 345」如何讓Java的正則表達式匹配器匹配鑑於這樣的錯誤消息的分隔符

我想消息拆分爲error_codeerror_text。在這種情況下,我想要5Invalid number : 123***345

然而,這段代碼拆分成匹配 5 : Invalid number123***345

這意味着正則表達式匹配上次:

Pattern PROCESSOR_ERROR_INFO_PATTERN_ONE = Pattern.compile("(.*):(.*)"); 

Matcher matcherOne = PROCESSOR_ERROR_INFO_PATTERN_ONE.matcher(error_message); 

if (matcherOne.matches()) { 
     processorErrorCode = matcherOne.group(1).trim(); 
     processorErrorMessage = matcherOne.group(2).trim(); 
} 

順便說一下,不能保證error_code只是數字。所以我不能使用正則表達式,如(\\d+):(.*) 有沒有一種方法可以控制匹配第一個:而不是默認的最後一個:

回答

2

您可以通過添加一個?使第一*量詞,所以第一組將盡可能小:

Pattern.compile("(.*?):(.*)") 
+0

很好的回答。在旁註中,Oracle教程將其稱爲不情願的量詞:https://docs.oracle.com/javase/tutorial/essential/regex/quant.html –

2

那麼你可以只使用split(String, int))限制爲2.這將是最簡單的。如果您想堅持您的解決方案,可以通過更改量詞的貪婪性(.*?)或匹配:(如([^:]*):(.*))之類的所有內容來匹配第一個:而不是最後一個: