[英]Java regex to match curly braces - “invalid escape sequence”
我想通過用 { } 遞歸拆分嵌套的 JSON 字符串來解析它們。 我想出的正則表達式是“{([^}]*.?)}”,我已經適當地測試了它可以抓取我想要的字符串。 但是,當我嘗試將它包含在我的 Java 中時,我收到以下錯誤:“無效的轉義序列(有效的轉義序列是 \\b \\t \\n \\f \\r \\” \\' \\ )”
這是我的代碼,以及發生錯誤的地方:
String[] strArr = jsonText.split("\{([^}]*.?)\}");
我究竟做錯了什么?
Java 正則表達式的糟糕之處在於,java 無法將正則表達式識別為正則表達式。
它只接受\\\\
、 \\'
、 \\"
或\\u[hexadecimal number]
作為有效的轉義序列。因此您必須對反斜杠進行轉義,因為顯然\\{
是一個無效的轉義序列。
修正版:
String[] strArr = jsonText.split("\\{([^}]*.?)\\}");
1.花括號在這里對於正則表達式語言沒有特殊意義,所以我認為它們不應該被轉義。
如果你想逃避他們,你可以。 反斜杠是正則表達式的轉義符號,但對於 Java 本身,它也應該使用第二個反斜杠進行轉義。
有很好的 JSON 解析庫https://stackoverflow.com/questions/338586/a-better-java-json-library
您使用的是不情願量詞,因此它不適用於嵌套大括號,例如對於{"a", {"b", "c"}, "d"}
它將匹配{"a", {"b", "c"}
你需要用一個反斜杠來逃避你的反斜杠。 因為, \\{
不是有效的轉義序列:-
String[] strArr = jsonText.split("\\{([^\\}]*.?)\\}");
您可以參考Pattern 文檔以獲取有關轉義序列的更多信息。
正則表達式應該是
"\\{([^}]*?)\\}"
.
不需要!
雙反斜杠:
String[] strArr = jsonText.split("\\{([^}]*.?)\\}");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.