1

私は正規表現に強いわけではないので、助けていただければ幸いです。

そのような文字列を解析する必要があります:

["text", "text", ["text",["text"]],"text"]

出力は次のようになります (4 文字列):

text, text, ["text",["text"]], text

私はこのパターンを試しました(\\[[^\\[,^\\]]*\\])|(\"([^\"]*)\")

String data="\"aa\", \"aaa\", [\"bb\", [\"1\",\"2\"]], [cc]";
Pattern p=Pattern.compile("(\\[[^\\[,^\\]]*\\])|(\"([^\"]*)\")");

ただし、出力は次のとおりです (出力内の引用符自体はそれほど重要ではありません)。

"aa", "aaa", "bb", "1", "2", [cc]

正規表現を改善するには?

4

3 に答える 3

2

入力に再帰があるようです。そのため、ネストされた[]正規表現が多数ある場合、おそらく最善の解決策ではありません。

indexOf()この目的のために、 andを使用して単純なアルゴリズムを使用する方がはるかに優れている/簡単だと思いますsubstring()。また、多くの場合、より効率的です。

于 2012-06-05T11:32:29.497 に答える
2

残念ながら、Java 正規表現ではそれができないと思います。ここにあるのは再帰式です..このタイプの言語は、基本的な正規表現に修正できません(これはJavaPatternが実際に何であるかです)。

しかし、その言語用の小さな再帰降下パーサーを作成するのはそれほど難しくありません。

インスピレーションについては、次の回答を確認してください。ネストされた式を解析するためのJavaメソッド

于 2012-06-05T11:34:15.043 に答える