【问题标题】:Java Pattern not matching RegEx [duplicate]Java模式与RegEx不匹配[重复]
【发布时间】:2012-09-22 15:44:19
【问题描述】:

这是我的问题。我有这个:

String data = "java.awt.Color[r=168,g=228,b=160]" //example this changes.
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(data);
if(m.matches()){
    ....
}

但是,它不匹配。这是为什么?我正在尝试检索括号内的数字。

我应该尝试什么?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    matches() 方法尝试匹配整个字符串,但您只需要在其中出现数字即可。 您需要使用find() 方法,并且您可能需要使用while 运算符而不是if,因为它将matcher 转移到下一个匹配项。

    【讨论】:

      【解决方案2】:

      matches 方法将尝试将正则表达式与整个输入进行匹配。

      使用findgroup 方法的组合来查找和使用匹配输入中:

      while (m.find())
          System.out.println(m.group());
      

      【讨论】:

        【解决方案3】:

        Matcher.matches() 匹配完整的字符串。您可以使用Matcher.find 来匹配各个整数:

        while (m.find()) {
          System.out.println(m.group(1));
        }
        

        【讨论】:

          【解决方案4】:

          Matcher.matches 告诉你你的正则表达式是否匹配 整个 字符串。您的字符串并非全是数字。它包含字母、点、等号和方括号。所以你的匹配器不匹配。

          你想要Matcher.find()。搜索部分匹配。 Matcher.group 然后允许您检索输入字符串的匹配部分。

          【讨论】:

            【解决方案5】:

            请注意,Matcher.matches() method 会尝试匹配整个字符串

            您想改用Matcher.find()

            【讨论】:

              【解决方案6】:

              因为您的正则表达式与字符串不匹配,所以在 \d 匹配之前(和之后)还有其他字符。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-12-03
                • 1970-01-01
                • 1970-01-01
                • 2018-05-29
                • 1970-01-01
                相关资源
                最近更新 更多