2012-03-13 6 views
1

に読んだ文字列ルビー私は次のように文字列を変換するための良い方法を探しています、アレイ/サブアレイの

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

のでarray[0] = ["apples"]array[1] = ["oranges"]、そしてarray[2] = ["strawberries", "peas", "grapes"]

私の文字列には、別の内側の角括弧がありますが、角括弧の間の内容はベースの部分配列になりますrray。英数字:これは、あなたの言葉は、正規表現の意味での言葉であることを前提としてい

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

:文字列を

+0

'配列がIF = [リンゴ、オレンジ、[イチゴ、エンドウ豆、ブドウ]'、次いで '配列[0]' '[ "リンゴ"]'はなく、またそれは '' "りんご" であります変数 'apples'に割り当てられている値です。 – sawa

答えて

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

や、あなたの場合に便利かもしれない代替結果のために...

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

は今、これらはcode injection exploitsに対して脆弱です入力が完全に制御されていないので、a JSON gemをインストールして、次のようにしてください:

require 'json' 

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

あなたは引用符内の単語をラップするgsubを使用することができ、その後eval。さらに、これはすばやく汚れていて、セキュリティリスクの可能性があるため、避けることができる場合(たとえば、入力を解析可能なシリアライゼーション言語にするなど)、evalを使用することはお勧めしません。

+0

これが使用される環境によっては、これをしないことをお勧めします。評価は悪とみなされます;-)。ここで間違っていることがたくさんあります。 – drexin

1

フム、あなたの文字列は「」あなただけのJSONパーサーを使用することができますよりも、それは、容易になるだろう;-)に囲まれることになる場合。しかし、これはあなた自身のパーサーを書く必要があります。ルビー用パーサージェネレーターの宝石はそれぞれ異なっています。例えば。

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

梢:http://treetop.rubyforge.org/

+0

回答/質問に署名を含めないでください。あなたのユーザープロフィールのように答えが必要な場合があります。それは単により多くのスペースを必要とし、解析テキストをより難しくします。 –

+0

これは削除されました。ありがとうございます。 – drexin

関連する問題