假设我有字符串
"[1,2,[3,4,[5,6]],7]"
我如何将其解析为数组
[1,2,[3,4,[5,6]],7]
?
嵌套结构和模式在我的用例中是完全任意的。
我目前的临时解决方案包括在每个句点后添加一个空格并使用 YAML.load
,但如果可能的话,我想要一个更简洁的解决方案。
(如果可能,不需要外部库的一个)
最佳答案
使用 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
可能被用作注入(inject)漏洞。
编辑:这是一个简单的递归的、基于正则表达式的解析器,没有验证,没有测试,不用于生产等:
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]
关于Ruby:将嵌套数组的字符串表示形式解析为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4477127/