に一致した後、私は、次のルビーのフラグメントのための速記を探しています:
var = 'foo 123 456 789 bar';
var =~ /^foo +(\d+) +(\d+) +(\d+) +bar$/;
first=$1
second=$2
third=$3
(first, second, third) = ....
のようなものは確かに存在しているように私には思えますしかし、私はそれを探しに行くことができる用語とは分かりません。
に一致した後、私は、次のルビーのフラグメントのための速記を探しています:
var = 'foo 123 456 789 bar';
var =~ /^foo +(\d+) +(\d+) +(\d+) +bar$/;
first=$1
second=$2
third=$3
(first, second, third) = ....
のようなものは確かに存在しているように私には思えますしかし、私はそれを探しに行くことができる用語とは分かりません。
あなたがmatch
代わりの=~
を使用する場合は、配列内のキャプチャグループにマッチした値を返すメソッドcaptures
を、持っているMatchData
オブジェクト、取り戻す:
first, second, third = var.match(/.../).captures
に別の方法を、これを使用できるか:
var = 'foo 123 456 789 bar'
/^foo +(?<first>\d+) +(?<second>\d+) +(?<third>\d+) +bar$/ =~ var
これは自動的にローカル変数にキャプチャを割り当てます。
注:str =~ regexp
はここでは機能しません。のみregexp =~ str
。
それは1.9
http://www.ruby-doc.org/ruby-1.9/classes/Regexp.html#M001100
str = 'foo 123 456 789 bar'
re = /^foo +(\d+) +(\d+) +(\d+) +bar$/
p re.match(str).to_a
#=> ["foo 123 456 789 bar", "123", "456", "789"]
_, a, b, c = re.match(str).to_a
p [a,b,c]
#=> ["123", "456", "789"]
で、一致が見つからない場合Regex#match
はnil
を返しますが、nil.to_a
は空の配列を返すことに注意してください動作しますので、私の知る限りでは、それは、鬼車のエンジンの機能です上記は安全です。
もしあなたが大文字小文字を区別しないためにスローされた場合、 'a、b、c = re.match(str)[1 ..- 1]' –
'; 'を忘れました – Nakilon