2017-01-17 4 views
0

Ich verstehe offensichtlich nicht Java Regex-Bibliothek oder Regex entweder für diese Angelegenheit.Java-Regex-Extrakt erfassen Gruppe, wenn es existiert

für diese Zeichenfolge:

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

diese regex explodiert in meinem Gesicht:

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(); 
    ... 
}  

Semantisch dies macht Sinn für mich, aber es scheint, dass ich völlig falsch verstanden etwas haben. Die Regex funktioniert in einigen Online-Regex-Editoren wie regex101, aber nicht in anderen. Könnte jemand bitte helfen Sie mir zu verstehen, warum ich 2013.05.12 nicht die Capture-Gruppe erhalten enthält ...

+2

Verwenden '.group (1)' – 4castle

+0

vielleicht, weil Sie mit '' PATTERN_FORMAT_1 statt 'REGEX_FORMAT_1'? – alfasin

Antwort

3

group()-group(0) entspricht und liefert die gesamte abgestimmte String. Verwenden Sie group(1), um die erste übereinstimmende Gruppe zu entfernen.

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); 
} 

Ausgang:

2013-05-12 
+0

Danke! Ich habe das nur durch Versuch und Irrtum bemerkt und wollte meine eigene Frage beantworten, aber Sie haben mich dazu geschlagen. Danke vielmals! – magnusson

Verwandte Themen