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

正则表达式无法计算括号,因为它们不是正则语言。解决方案将是使用即解析表达式语法实现而不是正则表达式。

于 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 回答