Java Regexp与匹配的确切数目不匹配
我有以下字符串:Java Regexp与匹配的确切数目不匹配,java,regex,Java,Regex,我有以下字符串: 0 days 00 hour 20 min 51 sec 我想使用Java的正则表达式从中提取所有数字: Pattern pattern = Pattern.compile("(\\d){1,2} days (\\d){2} hour (\\d){2} min (\\d){2} sec"); Matcher m = pattern.matcher("0 days 00 hour 20 min 51 sec"); 令我惊讶的是m.group(4)返回1而不是51。这同样适用于
0 days 00 hour 20 min 51 sec
我想使用Java的正则表达式从中提取所有数字:
Pattern pattern = Pattern.compile("(\\d){1,2} days (\\d){2} hour (\\d){2} min (\\d){2} sec");
Matcher m = pattern.matcher("0 days 00 hour 20 min 51 sec");
令我惊讶的是m.group(4)
返回1而不是51。这同样适用于m.group(2)
,它返回0而不是00
我发现这令人困惑,因为{n}应该与前面表达式的n次匹配,或者不匹配?您可能希望捕获同一组中的两个数字:
"(\\d{1,2}) days (\\d{2}) hour (\\d{2}) min (\\d{2}) sec"
这就是原始表达式的作用
0 days 00 hour 20 min 51 sec
匹配0,将其放在组1中(\d){1,2}
匹配0,将其置于组2中,再次匹配0,将其置于组2中(\d){2}
匹配2,将其放入组3,匹配0,将其放入组3(\d){2}
匹配5,将其放入组4,匹配1,将其放入组4(\d){2}
- 组1中的0
- 第2组中的0
- 第3组为0
- 第4组1名
"(\\d{1,2}) days (\\d{2}) hour (\\d{2}) min (\\d{2}) sec"
这就是原始表达式的作用
0 days 00 hour 20 min 51 sec
匹配0,将其放在组1中(\d){1,2}
匹配0,将其置于组2中,再次匹配0,将其置于组2中(\d){2}
匹配2,将其放入组3,匹配0,将其放入组3(\d){2}
匹配5,将其放入组4,匹配1,将其放入组4(\d){2}
- 组1中的0
- 第2组中的0
- 第3组为0
- 第4组1名
{…}
应该在(…)
括号内,例如
Pattern.compile("(\\d{1,2}) days (\\d{2}) hour (\\d{2}) min (\\d{2}) sec");
{…}
结构应该在(…)
括号内,例如
Pattern.compile("(\\d{1,2}) days (\\d{2}) hour (\\d{2}) min (\\d{2}) sec");
应该是
(\\d{1,2})
您将重复操作符从组中删除。应该是(\\d{1,2})
您将重复操作符从组中删除。问题是,当您有重复的捕获组(例如(abc)*
)时,只有最后一个匹配项将被“保存”。这就是为什么您需要(\\d{2})
。我觉得这与重复捕获组(例如(abc)*
)有关,只有最后一个匹配将被“保存”。这就是为什么您需要(\\d{2})
。我觉得这与