正则表达式 - 如果有多个括号,如何解析数据?

时间:2013-02-16 19:31:52

标签: php 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] 
}
]});

由于有子括号({和}),我不完全确定如何获得外括号中的内容。所以我只是想从中得到它:

"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"(.*?)\},{之类的东西,但它错过了一些数据。

3 个答案:

答案 0 :(得分:3)

使用正则表达式无法计算括号,因为这些不是常规语言。解决方案是使用解析表达式语法实现而不是RegEx。

答案 1 :(得分:0)

正则表达式在处理任何类型的嵌套方面都很糟糕,据我所知,任何可以递归嵌套的东西都是不可能的。相反,你应该使用适当的解析器。你有什么似乎是JSON(虽然它是无效的..我假设你粘贴的是不完整的)。 PHP有一个内置函数来解析它,json_decode

答案 2 :(得分:0)

为什么不使用json_decode()? 返回一个数组,你可以计算或预测它。

相关问题