/ / ruby​​ 1.8で正規表現を使用して文字列から複数の値を抽出する正しい方法-ruby、regex、string、ruby-1.8

Ruby 1.8で正規表現を使用して文字列から複数の値を抽出する正しい方法 - ruby​​、regex、string、ruby-1.8

私はルビーに比較的慣れていないので、正規表現のグループ化に基づいて、文字列から複数の値を抽出する「ruby」の方法を理解します。私はRuby1.8を使用しています(したがって、キャプチャに名前を付けたとは思いません)。

一致させて$ 1、$ 2を割り当てることもできますが、もっとエレガントな方法が必要だと思います(結局、これはルビーです)。

私もgrepで動作するものを持っていますが、配列を使用して最初の要素を取得しているだけなので、ハックのようです。

input="FOO: 1 BAR: 2"
foo, bar = input.grep(/FOO: (d+) BAR: (d+)/){[$1,$2]}[0]
p foo
p bar

オンラインで検索して閲覧してみました ルビードキュメント、しかし、より良いものを理解することはできませんでした。

回答:

回答№1の場合は3

ルビーズ String#match メソッドはaを返します MatchData メソッドを持つオブジェクト 捕獲 キャプチャの配列を返します。

>> string = "FOO: 1 BAR: 2"
=> "FOO: 1 BAR: 2"
>> string.match /FOO: (d+) BAR: (d+)/
=> #<MatchData "FOO: 1 BAR: 2" 1:"1" 2:"2">
>> _.captures
=> ["1", "2"]
>> foo, bar = _
=> ["1", "2"]
>> foo
=> "1"
>> bar
=> "2"

要約する:

foo, bar = input.match(/FOO: (d+) BAR: (d+)/).captures

回答№2の場合は1

どちらか:

foo, bar = string.scan(/[A-Z]+: (d+)/).flatten

または:

foo, bar = string.match(/FOO: (d+) BAR: (d+)/).captures

回答№3の場合は1

代わりにスキャンを使用してください:

input="FOO: 1 BAR: 2"

input.scan(/FOO: (d+) BAR: (d+)/) #=> [["1", "2"]]