Этот конкретный пример правильно анализируется с использованием JSON
:
s = "[1,2,[3,4,[5,6]],7]"
#=> "[1,2,[3,4,[5,6]],7]"
require 'json'
#=> true
JSON.parse s
#=> [1, 2, [3, 4, [5, 6]], 7]
Если это не сработает, вы можете попробовать запустить строку через eval
, но вы должны убедиться, что фактический код ruby не был передан, так как eval
может использоваться как инъекция уязвимость.
Редактировать: Вот простой рекурсивный синтаксический анализатор на основе регулярных выражений, без проверки, не проверенный, не для производственного использования и т. Д .:
def my_scan s
res = []
s.scan(/((\d+)|(\[(.+)\]))/) do |match|
if match[1]
res << match[1].to_i
elsif match[3]
res << my_scan(match[3])
end
end
res
end
s = "[1,2,[3,4,[5,6]],7]"
p my_scan(s).first #=> [1, 2, [3, 4, [5, 6]], 7]