Java 正则表达式匹配大括号 - “无效转义序列”

2022-09-02 05:35:36

我想通过按{}递归方式拆分嵌套的JSON字符串来解析嵌套的JSON字符串。我想出的正则表达式是“{([^}]*.?)}”,我已经测试过它适当地抓住了我想要的字符串。但是,当我尝试将其包含在我的Java中时,我收到以下错误:“无效的转义序列(有效的转义序列是\b \t \n \f \r \” \' \ )”

这是我的代码,错误发生的地方:

String[] strArr = jsonText.split("\{([^}]*.?)\}");

我做错了什么?


答案 1

关于Java正则表达式的令人讨厌的事情是Java不将正则表达式识别为正则表达式。
它只接受 、 或 作为有效的转义序列。因此,您必须转义反斜杠,因为显然是无效的转义序列。
更正后的版本:\\\'\"\u[hexadecimal number]\{

String[] strArr = jsonText.split("\\{([^}]*.?)\\}");

答案 2

1.卷曲大括号在这里对正则表达式语言没有特殊意义,所以我认为它们不应该被转义。

  1. 如果你想逃避他们,你可以。反斜杠是正则表达式的转义符号,但对于 Java 本身,也应该使用第二个反斜杠对它进行转义。

  2. 有很好的JSON解析库 https://stackoverflow.com/questions/338586/a-better-java-json-library

  3. 您正在使用不情愿的量词,因此它不适用于嵌套大括号,例如,因为它将匹配{"a", {"b", "c"}, "d"}{"a", {"b", "c"}