0

全て-

私は正規表現が大好きですが、複数のタイプの構文解析があると、かなり混乱します。

私は基本的に次のようなデータを解析しようとしています:

{"classs":15,"commondrop":true,"id":7101,"level":1,"name":"7Z",
 "slot":0,"source":[2],"subclass":0, 
 modes: { "mode":4,
          "4": { "count":15862,"outof":36461 }
        },
 count:15862, stack:[1,1]
}, 
{"classs":15,"commondrop":true,"id":62530,"level":1,"name":"7Z",
 "slot":0,"source":[2],"subclass":0,
  modes:{ "mode":4,
          "4":{ "count":13402,"outof":36461 }
        },
  count:13402,stack:[1,1]
},
{"classs":15,"commondrop":true,"id":3300,"level":5,"name":"7Rabbit's Foot",
 "slot":0,"source":[2],"subclass":0,
  modes:{"mode":4,
         "4":{ "count":1,"outof":36461 }
        },
  count:1,stack:[1,1] 
}
]});

サブブラケット({と})があるので、外側のブラケットにあるものだけを取得する方法が完全にはわかりません。だから私はそれからこれを取り出したいと思います:

"classs":15,"commondrop":true,"id":7101,"level":1,"name":"7Z","slot":0,"source":[2],"subclass":0,modes:{"mode":4,"4":{"count":15862,"outof":36461}},count:15862,stack:[1,1]

(その後、さらに解析してさらに分解することができます)

これは正規表現でも可能ですか?私は次のようなことを試み始めました\{"classs"(.*?)\},{が、データの一部が欠落しています。

4

3 に答える 3

3

正規表現は正規言語ではないため、角かっこを数えることはできません。解決策は、RegExの代わりにParsingExpressionGrammar実装を使用することです。

于 2013-02-16T19:34:10.540 に答える
0

正規表現は、あらゆる種類のネストを処理するのが苦手で、私の知る限り、再帰的にネストできるものはすべて不可能です。代わりに、適切なパーサーを使用する必要があります。あなたが持っているものはJSONのようです(無効ですが..貼り付けたものは不完全であると思います)。PHP には、これを解析するための関数が組み込まれていますjson_decode

于 2013-02-16T19:40:14.683 に答える
0

json_decode() を使用しないのはなぜですか? それは配列を返し、それをカウントまたは foreach できます。

于 2013-02-16T19:41:45.583 に答える