匹配器找不到匹配

时间:2014-09-09 01:51:31

标签: java regex matcher

我试图提取以下字符串中的数字:

09/29/2014

我目前正在使用代码:

Pattern p = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
Matcher m = p.matcher(startDatepicker);

String startYear = m.group(3);
String startMonth = m.group(1);
String startDay = m.group(2);

startDatepicker包含:09/29/2014

但是,我没有收到任何比赛..我也尝试用\\转发正斜杠,但这也没有用。

我错过了什么吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您需要致电find()来迭代您的匹配组。

Pattern p = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
Matcher m = p.matcher(startDatepicker);
while (m.find()) {
  ...
}

find()方法在传递给p.matcher()的输入中搜索正则表达式的出现次数。如果可以找到多个匹配项,则此方法将找到第一个匹配项,然后移至下一个匹配项以进行每个后续调用。

答案 1 :(得分:0)

在您访问匹配的群组之前,您需要在匹配器上调用find(),并检查它是否找到了匹配项:

Pattern p = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
Matcher m = p.matcher(startDatepicker);
if (!m.find()) {
    return;
}
String startYear = m.group(3);
String startMonth = m.group(1);
String startDay = m.group(2);

m.find()的召唤将匹配器置于第一场比赛中。

Demo.