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

Java正则表达式提取捕获组(如果存在),java,regex,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()) { Str

我显然也不理解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的捕获组…

group()
相当于
group(0)
,并返回完整的匹配字符串。使用
组(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
group()
相当于
group(0)
并返回整个匹配字符串。使用
组(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

使用
.group(1)
可能是因为您使用
PATTERN\u FORMAT\u 1
而不是
REGEX\u FORMAT\u 1
?使用
.group(1)
可能是因为您使用
PATTERN\u FORMAT\u 1
而不是
REGEX\u FORMAT\u 1
?谢谢!我只是通过反复试验才注意到这一点,并打算回答我自己的问题,但你抢先了我一步。非常感谢!谢谢我只是通过反复试验才注意到这一点,并打算回答我自己的问题,但你抢先了我一步。非常感谢!