2012-07-20 48 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(); 
//...