3

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

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

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

我应该尝试什么?

4

6 回答 6

11

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

while (m.find()) {
  System.out.println(m.group(1));
}
于 2012-10-01T18:59:01.323 回答
4

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

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

于 2012-10-01T18:57:46.647 回答
3

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

使用 thefind和methods 方法的组合group输入中查找和使用匹配项:

while (m.find())
    System.out.println(m.group());
于 2012-10-01T18:58:10.137 回答
3

请注意,该Matcher.matches()方法尝试匹配整个字符串

你想Matcher.find()改用。

于 2012-10-01T18:58:22.670 回答
1

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

于 2012-10-01T18:58:08.363 回答
1

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

于 2013-08-15T13:16:14.277 回答