我有这段代码
String str = "bla#ff0000bla#000000bla"; // String I want to convert
Pattern pat = Pattern.compile("/#([0-9a-fa-f]{6})/i"); // Regex that matches all hex color codes
Matcher mat = pat.matcher(str); // Find pattern in string
Log.d("Matcher", String.valueOf(mat.matches())); // This returns false
为什么会返回false?我想用mat.find()后做一个while循环(即使这不起作用)。我想获得所有十六进制颜色代码并获得他们的位置。 (十六进制代码看起来像#ff0000,#000000,#FF0000等)
这个问题似乎很短暂,但这就是我所得到的。没有错误,没有警告,没有。
答案 0 :(得分:3)
您正在使用Java的Javascript表示法。
抛弃最初的/
并用最初的/i
替换最终的(?i)
,或者使用Pattern.CASE_INSENSITIVE
标志。
Matcher#find
来迭代多个匹配,而不是将整个输入与Matcher#matches
匹配。示例强>
Pattern pat = Pattern.compile("#([0-9a-f]{6})", Pattern.CASE_INSENSITIVE);
Matcher mat = pat.matcher(str);
while (mat.find()) {
/* TODO something with mat.group()
* with the given input String, you'd get:
* #ff0000
* #000000
*/
}
最后,"必读"文学here。