Ruby函数类似于php中的parse_str?

Ruby函数类似于php中的parse_str?,php,ruby,Php,Ruby,我需要像这样解析一个字符串:a[metadata][[name]=don | do | this&a[name]=Hello World&a[metadata][[value]=I |真的|真的| CGI::parse为我提供了以下信息: {“一个[名字]”=>[“你好,世界],“一个[元数据][[名字]”=>[“不要做这个”],“一个[元数据][[值]”=>[“我真的是这么想的”]] 我想了解PHP对parse_str的处理方式,当给定相同的字符串时,它会执行以下操作: Array (

我需要像这样解析一个字符串:a[metadata][[name]=don | do | this&a[name]=Hello World&a[metadata][[value]=I |真的|真的|

CGI::parse为我提供了以下信息:

{“一个[名字]”=>[“你好,世界],“一个[元数据][[名字]”=>[“不要做这个”],“一个[元数据][[值]”=>[“我真的是这么想的”]]

我想了解PHP对parse_str的处理方式,当给定相同的字符串时,它会执行以下操作:

Array
(
    [a] => Array
        (
            [metadata] => Array
                (
                    [0] => Array
                        (
                            [name] => dont|do|this
                        )

                    [1] => Array
                        (
                            [value] => i|really|mean it
                        )

                )

            [name] => Hello World
        ))
任何帮助都会很棒


谢谢

还没有收到任何回复,也没有找到等效的函数,因此,出于我的目的,这项工作是基于我发现的东西,即为什么要在现在缺失的redhand.hobix.com上发布,或者什么都没有

hash1 = {}
hash2 = {}
array1 = []
array2 = []
resulthash = {}
count = 0
count2 = 0
keynum2 = 0
main = 'base'
h3main = 'base'
st.scan(/([\w]+)(\[|=)(.*?)(?=(&[\w]+\[|&[\w]+=|$))/) {
  var = $1 << $2 << $3  
  case var
  when /^([\w]+)\[(.*?)\]\[(\d+)\]\[(.*?)\]=(.*?)$/ then
    count2 += 1
     h3main = $2
     keynum2 = $2 << count2.to_s
     i = $3.to_i
     array1[i] = {} if array1[i].class != Hash
     array1[i].update({$4 => $5})
     hash2.update(keynum2 => array1)
  when /^([\w]+)\[(.*?)\]\[\]\[(.*?)\]=(.*?)$/ then
     count2 += 1
     h3main = $2
     keynum2 = $2 << count2.to_s
     i = count2
     array2[i] = {} if array2[i].class != Hash
     array2[i].update({$4 => $5})
     hash2.update(keynum2 => array2)
  when /^([\w]+)\[(.*?)\]=(.*?)$/ then 
     main = $1
     count += 1
     keynum = $1 << count.to_s
     hash1.update(keynum => {$2 => $3})
  when /^(a)=(.*?)$/ then 
    resulthash.update($1 => $2)
  end
}
hashx = {}
hash1.each_pair {|k,v| hashx.update(main => v) }
resulthash[main] = hashx
if not hash2.empty? then
  if not resulthash[h3main].class == Hash then
    resulthash[main][h3main] = {}
  end
  hash2.each_pair{ |k,v| 
    if v.class == Array then
      resulthash[main][h3main] = v
    else
      resulthash[main][h3main].update(v)
    end
  }
end
hash1={}
hash2={}
数组1=[]
array2=[]
resulthash={}
计数=0
count2=0
keynum2=0
main='base'
h3main='base'
st.scan(/([\w]+)(\[\124;=)(.*)(&[\ w]+\[\w]+\[\w]+=$)/){
var=$1阵列2)
当/^([\w]+)\[(.*?\]=(.*?)$/然后
main=$1
计数+=1
keynum=$1{$2=>$3})
当/^(a)=(.*?)$/那么
resulthash.update($1=>2)
结束
}
hashx={}
hash1.each|u对{| k,v | hashx.update(main=>v)}
resulthash[main]=hashx
如果不是hash2.empty?那么
如果不是resulthash[h3main].class==Hash,则
结果ash[main][h3main]={}
结束
hash2.每个|对{k,v|
如果v.class==数组,则
结果ash[main][h3main]=v
其他的
resulthash[main][h3main]。更新(v)
结束
}
结束
上面的方法很有效,请注意,我有一个真正的方法告诉你如何对[]个项目进行分组,因此它们作为单个项目在一个数组中。最好设置索引,比如[somegroup][0][value]等

这是复制粘贴和通用的,因此请注意我们。

查看parse_str文档: