正则表达式无法正确提取(Java Pattern / Matcher)

时间:2017-03-17 21:18:42

标签: java regex pattern-matching reluctant-quantifiers

我对正则表达式上不情愿的获取策略有疑问。

给出以下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”吗?

谢谢

0 个答案:

没有答案