正则表达式找不到整个字符串的匹配项

时间:2016-10-26 12:15:59

标签: java android regex

我有这段代码

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等)

这个问题似乎很短暂,但这就是我所得到的。没有错误,没有警告,没有。

1 个答案:

答案 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