Java正则表达式提取捕获组(如果存在)

时间:2017-01-17 21:13:07

标签: java regex

我显然不了解Java的正则表达式库或正则表达式。

这个字符串:

String text = "asdf 2013-05-12 asdf";

这个正则表达式在我脸上爆炸:

String REGEX_FORMAT_1 = ".+?([0-9]{4}\\s?-\\s?[0-9]{2}\\s?-\\s?[0-9]{2}).+";

Matcher matcher_1 = PATTERN_FORMAT_1.matcher(text);
if(matcher_1.matches()) {
    String matchedGroup = matcher_1.group();
    ...
}     

语义上这对我有意义,但似乎我完全误解了一些东西。正则表达式在一些在线正则表达式编辑器(如regex101)中运行良好,但在其他编辑器中则没有。有人可以帮我理解为什么我没有得到包含2013-05-12 ...

的捕获组

1 个答案:

答案 0 :(得分:4)

group()相当于group(0)并返回整个匹配的字符串。使用group(1)拉出第一个匹配的组。

String  text    = "asdf 2013-05-12 asdf";
String  regex   = ".+?([0-9]{4}\\s?-\\s?[0-9]{2}\\s?-\\s?[0-9]{2}).+";
Matcher matcher = Pattern.compile(regex).matcher(text);

if (matcher.matches()) {
    String matchedGroup = matcher.group(1);
    System.out.println(matchedGroup);
}

输出:

2013-05-12