Неправильное извлечение регулярного выражения (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)?

Спасибо

0 ответов

Другие вопросы по тегам