2012-05-02 10 views
3

Ruby on Railsアプリケーションで正規表現を使用して、指定された文字列を検索したり、角かっこ([と] 2つの間の内容を選択します。例えばruby​​で正規表現を使用して特定の文字を検索しようとしています

Lorem ipsum [dolor sit] amet... 

この文字列では結果は次のようになります。[dolor sit]

私はrubularビットで遊んこれは、多かれ少なかれ、私は

/\[.*?\]/ 
欲しいものないことがわかりました

私の質問は、どのように2つの角括弧内のすべてを角括弧を選択せず​​に一致させるのですか?また、実際にそれらをルビスクリプトにどのように統合するのですか?

正規表現あなたが抽出したい入力の部分に相当する正規表現の一部をラップすることができますので、あなたたちが提供できるすべてのヘルプははるかに高く評価されるだろう:)

+0

本当に一致したいものはありますか?ここで一致する必要があります 'Lorem ipsum [do [lor [si [t] amet]' – sln

+0

あなたの新しい正規表現である '/\[()*\]/'は、与えられたサンプルしかし、決して '/\[(.*?)\]/'と同じではありません。 – sln

+0

@sln oh ok ok、違いを説明できますか? – gregchapple

答えて

4

String#scan

>> s="Lorem ipsum [dolor sit] [amet] ..." 
=> "Lorem ipsum [dolor sit] [amet] ..." 
>> s.scan(/\[([^\]]*)\]/).flatten 
=> ["dolor sit", "amet"] 
+0

それはまさに私が欲しいものです、ありがとう! – gregchapple

1

を私のために全く新しい地面です()内側:$1(一般的に$iiが一致する単語のインデックスを表す):あなたはまた、グローバル変数を経由してマッチングの結果にアクセスすることができます

str = "Lorem ipsum [dolor sit] amet....".match(/\[(.*?)\]/) 
# str --> #<MatchData "[dolor sit]" 1:"dolor sit"> 
str[1] # Will give you 'dolor sit' 

注意。正規表現の複数のキャプチャを収集

+0

[]の複数のインスタンスに一致させようとするとうまくいきません。すべてのインスタンスに一致させるにはどうすればよいですか? – gregchapple

+0

@gregchappleあなたは「Lorem ipsum [dolor sit] [amet] ...」のように意味しますか?あなたは「dolor sit」と「amet」を抽出したいと思いますか? –

+0

まあまあ!それは可能ですか? – gregchapple

2

のための仕事であるあなたはString#scanを使用する必要があります。

"Hi [there] how are [you]?".scan(/\[.*?\]/) 
=> ["[there]", "[you]"] 

このメソッドは、すべての試合を返し、文字列全体を反復します。