我正在寻找一种转换字符串的好方法:
"[apples, oranges, [strawberries, peas, grapes]]"
进入一个看起来像的数组:
array = [apples, oranges, [strawberries, peas, grapes]].
因此array[0] = ["apples"]
,array[1] = ["oranges"]
和array[2] = ["strawberries", "peas", "grapes"]
所以,每当我的字符串中有另一个内方括号时,括号内的内容将是我的基本数组的子数组。
答案 0 :(得分:1)
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+/, '"\&"'