Java Pattern与RegEx不匹配

时间:2012-10-01 18:56:04

标签: java regex

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

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()){
    ....
}

然而,它不匹配。这是为什么?我试图检索括号内的数字。

我该怎么办?

6 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

结合使用findgroup方法,在输入中找到并使用匹配

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

答案 3 :(得分:2)

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

您想改用Matcher.find()

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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