Java正则表达式匹配花括号 – “无效的转义序列”
我想通过{}递归地将它们拆分来解析嵌套的JSON字符串。 我想出的正则表达式是“{([^}] *。?)}”,我已经测试过适当的抓取我想要的字符串。 但是,当我尝试将其包含在我的Java中时,我收到以下错误:“无效的转义序列(有效的转义序列是\ b \ t \ n \ f \ r \”\’\)
这是我的代码,以及发生错误的地方:
String[] strArr = jsonText.split("\{([^}]*.?)\}");
我究竟做错了什么?
对于正则表达式语言,curle括号在这里没有特殊含义,所以我认为它们不应该被转义。
-
如果你想逃避他们,你可以。 反斜杠是regexp的转义符号,但它也应该通过第二个反斜杠转义为Java本身。
-
你为什么不逃避分组构造中的curle大括号?
-
有很好的JSON解析库https://stackoverflow.com/questions/338586/a-better-java-json-library
-
您正在使用不情愿的量词,因此它不适用于嵌套大括号,例如对于
{"a", {"b", "c"}, "d"}
它将匹配{"a", {"b", "c"}
关于Java正则表达式的令人讨厌的事情是java不能将正则表达式识别为正则表达式。
它只接受\\
, \'
, \"
或\u[hexadecimal number]
作为有效的转义序列。因此你必须转义反斜杠,因为很明显\{
是一个无效的转义序列。
更正版本:
String[] strArr = jsonText.split("\\{([^}]*.?)\\}");
加倍反斜杠:
String[] strArr = jsonText.split("\\{([^}]*.?)\\}");
正则表达式应该是
"\\{([^}]*?)\\}"
.
不需要!
你需要用一个反斜杠来逃避反斜杠。 因为, \{
不是有效的转义序列: –
String[] strArr = jsonText.split("\\{([^\\}]*.?)\\}");
有关转义序列的更多信息,请参阅Pattern文档 。