【问题标题】:Java Syntax error in regexp pattern during the removing trailing comma删除尾随逗号期间正则表达式模式中的 Java 语法错误
【发布时间】:2015-09-28 13:23:01
【问题描述】:

我有这样的字符串:

{"ssid":"TEST", "key_mgmt":"NONE",  "priority":"102",}

我正在尝试删除最后一个属性后的最后一个逗号。

,}

使用:

.replaceAll("(,[[:space:]]*})", "}")

但它抛出以下错误:

Syntax error in regexp pattern near index 15:
(,[[:space:]]*})

请问如何解决?

注意:Android SDK 中使用的是 Java。

【问题讨论】:

  • 你应该试试,\s*}。括号在您的情况下是可选的。
  • 我刚刚用普通的Java测试过,运行良好。这可能与Android SDK有关,但我不熟悉。它表示错误接近}。也许你需要用反斜杠转义它?
  • 你确定Java支持[[:space:]]类型表达式吗?
  • 尝试.replaceAll(",\\p{Space}*}", "}"),或匹配任何Unicode空格,使用.replaceAll(",\\s*}", "}")

标签: java android regex whitespace


【解决方案1】:

这里的技巧是使用前瞻?= 搜索到},当找到它时,您现在可以匹配它前面的逗号,,并将逗号替换为空字符串@ 987654324@

java中的一个例子

public static void main(String[] args) {

         String l="{\"ssid\":\"TEST\", \"key_mgmt\":\"NONE\",  \"priority\":\"102\",}";
         String m=",(?=})";
        Pattern pat = Pattern.compile(m);
        Matcher matcher = pat.matcher(l);

        System.out.println(matcher.replaceAll(""));

}

输出

{"ssid":"TEST", "key_mgmt":"NONE",  "priority":"102"}

【讨论】:

  • 在执行replaceAll() 之前无需调用find(),尤其不需要将其置于循环中。 replaceAll() 自己完成所有的查找和循环。
  • 此外,除了使用错误的字符类语法之外,OP 的正则表达式也很好。您的前瞻性提议并没有解决问题,并且没有令人信服的理由使用它来代替 OP 正在做的事情。
  • 您的示例在索引 5 附近的正则表达式模式中引发语法错误:在 Android“Java”中。
  • 我没有抛出任何错误。确保您准确复制发布的内容
【解决方案2】:

什么是空间?试试这个:

.replaceAll(", ?}", "}")

如果你想测试,试试这个网站:https://regex101.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多