【问题标题】:Regex Java Illegal/unsupported escape sequence正则表达式 Java 非法/不支持的转义序列
【发布时间】:2018-04-20 17:30:51
【问题描述】:

我正在搜索“color=number,number,number”并使用正则表达式获取“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*"

上面的编译但没有得到想要的结果。

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

【问题讨论】:

  • Java 是否支持\K

标签: java android regex


【解决方案1】:

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:一个字字符、0+ 位数字和 2 次出现 ,,后跟 , 和 0+ 位数字。你甚至可以写成(\\w\\d*(?:,\\d*){2})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多