【问题标题】:Matcher not finding matches匹配器找不到匹配项
【发布时间】:2014-09-09 01:51:30
【问题描述】:

我正在尝试提取以下字符串中的数字:

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

但是,我没有收到任何匹配项。我还尝试使用 \\ 转义正斜杠,但这也没有用。

我错过了什么吗?

感谢您的帮助。

【问题讨论】:

    标签: java regex matcher


    【解决方案1】:

    在您可以访问匹配的组之前,您需要在匹配器上调用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.

    【讨论】:

      【解决方案2】:

      您需要调用 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() 的输入中搜索出现的正则表达式。如果可以找到多个匹配项,此方法将找到第一个匹配项,然后为每个后续调用移动到下一个匹配项。

      【讨论】:

        猜你喜欢
        • 2017-07-19
        • 2019-12-01
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        相关资源
        最近更新 更多