20

ネストされたJSON文字列を{}で再帰的に分割して解析したいと思います。私が思いついた正規表現は「{([^}] *。?)}」です。これは、適切にテストして、必要な文字列を取得します。ただし、Javaに含めようとすると、次のエラーが発生します。「無効なエスケープシーケンス(有効なものは\ b \ t \ n \ f \ r \ "\'\)」

これは私のコードであり、エラーが発生する場所は次のとおりです。

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

私は何が間違っているのですか?

4

5 に答える 5

19

Java正規表現の厄介な点は、Javaが正規表現を正規表現として認識しないことです。、、、または有効なエスケープシーケンスとしてのみ
受け入れます。したがって、明らかに無効なエスケープシーケンスであるため、バックスラッシュをエスケープする必要があります。 修正されたバージョン:\\\'\"\u[hexadecimal number]\{

String[] strArr = jsonText.split("\\{([^}]*.?)\\}");
于 2012-10-11T16:46:07.747 に答える
18

1.ここでは、中括弧は正規表現言語にとって特別な意味を持たないため、エスケープしないでください。

  1. あなたがそれらを脱出したいなら、あなたはそうすることができます。バックスラッシュは正規表現のエスケープ記号ですが、Java自体の場合も2番目のバックスラッシュでエスケープする必要があります。

  2. 優れたJSON解析ライブラリがありますhttps://stackoverflow.com/questions/338586/a-better-java-json-library

  3. 気が進まない数量詞を使用しているため、ネストされた中括弧では機能しません。たとえば、{"a", {"b", "c"}, "d"}一致する場合などです。{"a", {"b", "c"}

于 2012-10-11T16:54:39.977 に答える
4

もう1つのバックスラッシュでバックスラッシュをエスケープする必要があります。\{は、有効なエスケープシーケンスではないため:-

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

エスケープシーケンスの詳細については、パターンのドキュメントを参照してください。

于 2012-10-11T16:44:31.290 に答える
4

正規表現は

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

.必須ではありません!

于 2012-10-11T16:50:15.577 に答える
3

バックスラッシュを2倍にします。

String[] strArr = jsonText.split("\\{([^}]*.?)\\}");
于 2012-10-11T16:47:54.873 に答える