簡體   English   中英

Java 正則表達式匹配花括號 - “無效的轉義序列”

[英]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.花括號在這里對於正則表達式語言沒有特殊意義,所以我認為它們不應該被轉義。

  1. 如果你想逃避他們,你可以。 反斜杠是正則表達式的轉義符號,但對於 Java 本身,它也應該使用第二個反斜杠進行轉義。

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

  3. 您使用的是不情願量詞,因此它不適用於嵌套大括號,例如對於{"a", {"b", "c"}, "d"}它將匹配{"a", {"b", "c"}

你需要用一個反斜杠來逃避你的反斜杠。 因為, \\{不是有效的轉義序列:-

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

您可以參考Pattern 文檔以獲取有關轉義序列的更多信息。

正則表達式應該是

"\\{([^}]*?)\\}"

. 不需要!

雙反斜杠:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM