微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ruby:将嵌套数组的字符串表示解析为数组?

假设我有字符串
"[1,2,[3,4,[5,6]],7]"

我将如何解析到数组中

[1,7]

嵌套结构和模式在我的用例中是完全任意的.

我目前的ad-hoc解决方案涉及在每个时期之后添加一个空格并使用YAML.load,但如果可能,我想要更清洁一个.

(如果可能,则不需要外部库)

解决方法

正在使用JSON正确解析该特定示例:
s = "[1,7]"
#=> "[1,7]"
require 'json'
#=> true
JSON.parse s
#=> [1,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,7]"
p my_scan(s).first #=> [1,7]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐