2012-07-20 21 views
1

嗨,我有一個字符串,並希望提取一個匹配正則表達式的子字符串,我現在已刪除子字符串的代碼,我希望它是唯一應該保留的部分。Java正則表達式子串

我有什麼,這消除它,我想留着,

String ticketReference = "You have been assigned to the following Support Ticket: ST-00003 bla bla bla"; 

ticketReference = ticketReference.replaceAll("'((ST-)[0-9]{5})", " "); 

所需的輸出: 「ST-00003」

thanx提前

回答

3

您可以使用捕獲組爲此,他們都表示$n在Java中:

String ticketReference = "You have been assigned to the following Support Ticket: ST-00003 bla bla bla"; 
ticketReference = ticketReference.replaceAll("^.*(ST-[0-9]{5}).*$", "$1"); 
+0

的偉大工程,如果不是ST-00003後換行,怎麼辦如果有換行符,我仍然會返回正確的?謝謝 – ex0b1t 2012-07-20 08:15:08

+0

無論它是否代碼ticketReference.replaceAll(「^。*(ST- [0-9] {5} [\\ n] *)。* $」,「$ 1」); ' – ex0b1t 2012-07-20 08:18:06

+0

通過設置'Pattern.DOTALL'標誌:'「(?s)^。*(ST- [0-9] {5}),您也可以使'''匹配'\ n'。* $」 '。 – Keppil 2012-07-20 08:23:35

1

replaceAll解決方案有沒有錯誤處理所以如果找不到匹配,字符串保持不變。


下面是使用PatternMatcher(在我的腦海裏很容易)做一個正確的方法:

String stringToDecode = 
    "You have been assigned to the following Support Ticket: ST-00003 bla bla"; 

Matcher m = Pattern.compile("ST-[0-9]{5}").matcher(stringToDecode); 

if (!m.find()) 
    throw new CouldNotFindTicketException(stringToDecode); 

String ticketReference = m.group(); 
//...