Java的模式不匹配正则表达式。

6

我有一个问题,我的代码如下:

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个回答

15

Matcher.matches()方法匹配整个字符串。你可以使用Matcher.find方法匹配单个整数:

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

4
matches方法将尝试将正则表达式与整个输入进行匹配。
使用findgroup方法的组合来查找和使用输入中的匹配项:(译者注:即在输入中查找并使用匹配项)
while (m.find())
    System.out.println(m.group());

4
< p >Matcher.matches告诉您正则表达式是否与整个字符串匹配。 您的字符串不全是数字。 它包含字母,点,等号和方括号。 因此,您的匹配器不匹配。

您需要使用Matcher.find()。 它搜索部分匹配项。 然后,Matcher.group允许您检索输入字符串的匹配部分。


3

1
matches() 方法尝试匹配整个字符串,但你只需要其中的数字出现次数。 你需要使用 find() 方法,并且可能需要使用 while 运算符代替 if,因为它会将 matcher 移动到下一个匹配项。

1

由于您的正则表达式与字符串不匹配,因此在 \d 匹配之前(和之后)仍有其他字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接