这是我的问题。我有这个:
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()){
....
}
然而,它不匹配。这是为什么?我试图检索括号内的数字。
我该怎么办?
答案 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
方法会尝试将正则表达式与整个输入进行匹配。
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
转移到下一个匹配项。