На самом деле не получил никаких ответов, и до сих пор не нашел эквивалентной функции, поэтому для моих целей это работает, основываясь на чем-то, что я обнаружил, что _why опубликовал на недостающем redhanded.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
Вышеуказанное работает, заметьте, у меня есть реальный способ рассказать, как группировать [] элементы, чтобы они были в массиве как отдельные элементы. Лучше всего установить индекс, например, [somegroup] [0] [value] и т. Д.
Это была копия, вставленная и обобщенная, поэтому будьте осторожны.