2017-01-17 38 views
0

我明顯不理解Java的正則表達式庫或正則表達式。Java正則表達式提取捕獲組(如果存在)

該字符串:

String text = "asdf 2013-05-12 asdf"; 

這個表達式爆炸在我的臉上:

String REGEX_FORMAT_1 = ".+?([0-9]{4}\\s?-\\s?[0-9]{2}\\s?-\\s?[0-9]{2}).+"; 

Matcher matcher_1 = PATTERN_FORMAT_1.matcher(text); 
if(matcher_1.matches()) { 
    String matchedGroup = matcher_1.group(); 
    ... 
}  

語義這個對我來說很有意義,但似乎我已經完全被誤解的東西。正則表達式在一些在線正則表達式編輯器(如regex101)中正常工作,但在其他正則表達式中不起作用。有人能幫我理解爲什麼我沒有得到包含捕獲組2013-05-12 ...

+2

使用'。集團(1)' – 4castle

+0

也許是因爲使用了''PATTERN_FORMAT_1代替'REGEX_FORMAT_1'? – alfasin

回答

3

group()相當於group(0)並返回整個匹配的字符串。使用group(1)來拉出第一個匹配的組。

String text = "asdf 2013-05-12 asdf"; 
String regex = ".+?([0-9]{4}\\s?-\\s?[0-9]{2}\\s?-\\s?[0-9]{2}).+"; 
Matcher matcher = Pattern.compile(regex).matcher(text); 

if (matcher.matches()) { 
    String matchedGroup = matcher.group(1); 
    System.out.println(matchedGroup); 
} 

輸出:

2013-05-12 
+0

謝謝!我只是注意到,通過試驗和錯誤,並會回答我自己的問題,但你打敗了我。非常感謝! – magnusson