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

前端之家收集整理的这篇文章主要介绍了Ruby:将嵌套数组的字符串表示解析为数组?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有字符串
  1. "[1,2,[3,4,[5,6]],7]"

我将如何解析到数组中

  1. [1,7]

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

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

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

解决方法

正在使用JSON正确解析该特定示例:
  1. s = "[1,7]"
  2. #=> "[1,7]"
  3. require 'json'
  4. #=> true
  5. JSON.parse s
  6. #=> [1,7]

如果不行,可以尝试运行字符串,通过eval,但您必须确保没有实际的ruby代码被传递,因为eval可以用作注入漏洞.

编辑:这是一个简单的递归,基于正则表达式的解析器,无验证,未测试,不适用于生产使用等:

  1. def my_scan s
  2. res = []
  3. s.scan(/((\d+)|(\[(.+)\]))/) do |match|
  4. if match[1]
  5. res << match[1].to_i
  6. elsif match[3]
  7. res << my_scan(match[3])
  8. end
  9. end
  10. res
  11. end
  12.  
  13. s = "[1,7]"
  14. p my_scan(s).first #=> [1,7]

猜你在找的Ruby相关文章