Неправильное извлечение регулярного выражения (Java Pattern / Matcher)
У меня есть вопрос о неохотной стратегии извлечения регулярных выражений.
Учитывая следующий код Java:
Pattern datePattern = Pattern.compile("(.*?)(\\d\\d\\d\\d-\\d\\d-\\d\\d)(.*)");
Matcher matcher = datePattern.matcher("2017-03-16");
if(matcher.find()){
System.out.println("Matched");
String extractedDate = matcher.group(1);
System.out.println("Extracted date: " + extractedDate);
}
Я получаю этот вывод:
Matched
Extracted date:
Таким образом, matcher.group(1) просто извлекает пустую строку. Кажется, я не понимаю, как на самом деле работает стратегия неохотного извлечения. Я думал, что первая определенная группа в шаблоне:
(. *?)
постараюсь подобрать как можно меньше символов. Другими словами, когда он может сопоставить что-то со второй группой:
(\ D \d\d\d-\d\d-\d\d)
тогда он сопоставит его с этой группой и потребит первую группу с "ничем".
Третья группа также не должна иметь никакого эффекта по моему мнению.
Может кто-нибудь объяснить мне, почему в данном примере я не получаю ожидаемую строку "2017-03-16" от matcher.group(1)?
Спасибо