2014-11-20 125 views
0

我想解析一个字符串,其中包含一串值代表不同的方式。以下是我迄今为止:Ruby正则表达式文本解析

acc=acc.scan(/"([achievement|stat]).([\w]+.)*":[0-9]+/).flatten 

这对于工作:

  {"stat.crouchOneCm":2392,"stat.craftItem.minecraft.bed":1,"stat.craftItem.minecraft.wooden_pickaxe":1 

我得到(正是我期望的那样):

s 
crouchOneCm 
2392 
s 
bed 
1 
s 
wooden_pickaxe 
1 

,但这样的事情不工作,除了上面的东西:

"achievement.exploreAllBiomes":{"value":0,"progress":["Desert","DesertHills","Ocean","Beach","Savanna Plateau M","Savanna","Savanna Plateau","River"]},"stat.craftItem.minecraft.iron_pickaxe":1," 

我的目标是这样的:

a 
exploreAllBiomes 
["Desert","DesertHills","Ocean","Beach","Savanna Plateau M","Savanna","Savanna Plateau","River"] 
s 
iron_pickaxe 
1 

任何人有一个想法?

+3

这看起来像JSON,那么为什么不使用一个真正的解析器? – August 2014-11-20 17:51:38

+0

......因为我是白痴:)).... derp – Rilcon42 2014-11-20 18:00:19

+0

如果不是这样,请回答并关闭你的问题。 – Felix 2014-11-20 19:37:16

回答

0

唉...的例子字符串是不完整的,但你处理JSON ...

require 'json' 

hash = JSON['{"stat.crouchOneCm":2392,"stat.craftItem.minecraft.bed":1,"stat.craftItem.minecraft.wooden_pickaxe":1}'] 
hash 
# => {"stat.crouchOneCm"=>2392, 
#  "stat.craftItem.minecraft.bed"=>1, 
#  "stat.craftItem.minecraft.wooden_pickaxe"=>1}