我对正则表达式上不情愿的获取策略有疑问。
给出以下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”吗?
谢谢