2013-02-16 23 views
0

全部-正則表達式 - 如何在有多個括號時解析數據?

我喜歡regex相當多,但是當有多種類型的解析我很困惑。

基本上,我試圖解析像這樣的數據:

{"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] 
} 
]}); 

由於有子括號({和})我不完全知道如何只得到什麼是在outter支架。所以,我只是想這一點的吧:

"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"(.*?)\},{,但它錯過了一些數據。

+1

這看起來像JSON。爲什麼不使用JSON解析器,例如http://www.php.net/manual/en/function.json-decode.php? – 2013-02-16 19:38:02

+0

現在,這看起來像一個'JSON'。因此,使用'json解析器'而不是'Regex'。 – 2013-02-16 19:38:15

回答

3

使用正則表達式計算括號是不可能的,因爲這些不是正則語言。解決方案將使用Parsing Expression Grammar實現,而不是RegEx。

0

正則表達式在處理任何類型的嵌套方面都很糟糕,並且據我所知,任何可以遞歸嵌套的東西都是不可能的。相反,你應該使用適當的解析器。你看起來是JSON(雖然它是無效的......我假設你粘貼的是不完整的)。 PHP有一個內置函數來解析這個,json_decode

+0

由於[]的原因,不能使用它,它是傳遞給函數的參數,所以它永遠不會解碼。我希望這很簡單:/ – Geesu 2013-02-16 19:42:26

+0

你是什麼意思'[]'?這是有效的JSON ... – 2013-02-16 19:43:46

0

爲什麼不使用json_decode()? 返回一個數組,你可以計數或foreach它。