0

我有一个关于正则表达式的勉强获取策略的问题。

给定以下 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)

然后它将它与该组匹配并以“无”消耗第一组。

在我看来,第三组也应该没有影响。

有人可以解释一下为什么在给定的示例中我没有从 matcher.group(1) 中获得预期的字符串“2017-03-16”吗?

谢谢

4

0 回答 0