ruby - 将字符串读入数组/子数组

时间:2012-03-13 19:52:46

标签: ruby

我正在寻找一种转换字符串的好方法:

"[apples, oranges, [strawberries, peas, grapes]]"

进入一个看起来像的数组:

array = [apples, oranges, [strawberries, peas, grapes]].

因此array[0] = ["apples"]array[1] = ["oranges"]array[2] = ["strawberries", "peas", "grapes"]

所以,每当我的字符串中有另一个内方括号时,括号内的内容将是我的基本数组的子数组。

3 个答案:

答案 0 :(得分:1)

您可以使用gsub将单词用引号括起来然后eval字符串:

eval str.gsub(/\w+/) { |match| "'#{match}'" }

这假设你的单词是正则表达式中的单词:字母数字。此外,这是快速而又脏的,如果可以避免(例如,通过使用可解析的序列化语言输入),我建议不要使用eval因为它可能存在安全风险

答案 1 :(得分:1)

嗯,如果你的字符串被“”包围,那么你会比使用JSON解析器更容易;-)。但为此你必须编写自己的解析器。 ruby有不同的解析器生成器宝石。例如。

Parslet:http://kschiess.github.com/parslet/

Treetop:http://treetop.rubyforge.org/

答案 2 :(得分:1)

eval s.gsub /\w+/, '"\&"'

或者,对于可能有用的替代结果......

eval s.gsub /\w+/, ':\&'

现在,如果您无法完全控制输入,则这些内容容易受code injection exploits攻击,因此您可以安装a JSON gem并执行以下操作:

require 'json'

JSON.parse s.gsub /\w+/, '"\&"'