正则表达式Java非法/不支持的转义序列

时间:2018-04-20 09:28:28

标签: java android regex

我正在搜索" color = number,number,number"得到"号码,号码,号码"部分使用正则表达式,但当我把正则表达式模式,

我得到: 正则表达式' \ bcolor = \ b \ K \ w \ d ,\ d *,\ d *"'格式错误:非法/不支持的转义序列*

以下是代码:

    Pattern p = Pattern.compile("\\bcolor=\\b\\K\\w\\d*,\\d*,\\d*");
    Matcher m = p.matcher(url);
    if(m.find()){
        return m.group(0);
    }
    else {
        return "0,0,0";
    }

我也尝试过:

    "\\bcolor=\\b\\\\K\\w\\d*,\\d*,\\d*"

    "\\\\bcolor=\\\\b\\\\K\\\\w\\\\d*,\\\\d*,\\\\d*"

以上编译但未获得所需结果。

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

Android中的正则表达式引擎不支持\K match reset operator。您可以安全地使用要提取的正则表达式部分周围的捕获组,然后使用.group(1)抓取它:

Pattern p = Pattern.compile("\\bcolor=(\\w\\d*,\\d*,\\d*)");
Matcher m = p.matcher(url);
if(m.find()){
    return m.group(1);
}
else {
    return "0,0,0";
}

请注意,您不需要第二个\b字边界,因为它隐含在=(非字母字符)和\w之间(与字符字符匹配)。

<强>详情

  • \bcolor= - color=作为一个完整的词
  • (\w\d*,\d*,\d*) - 捕获组#1:单词char,0+位数,2次出现,后跟,和0+位数。您甚至可以将其写为(\\w\\d*(?:,\\d*){2})