/ / Y a-t-il un raccourci pour assigner de 1 $… n $ après la correspondance en ruby ​​- ruby

Y a-t-il un raccourci pour attribuer à partir de $ 1… $ n après appariement dans ruby ​​- ruby

Je cherche un raccourci pour le fragment de rubis suivant:

var = "foo 123  456  789   bar";

var =~ /^foo +(d+) +(d+) +(d+) +bar$/;

first=$1
second=$2
third=$3

Il me semble qu'il y a certainement quelque chose comme (first, second, third) = .... mais je n'ai aucune idée avec quel terme je pourrais aller le chercher.

Réponses:

3 pour la réponse № 1

Si tu utilises match au lieu de =~, vous récupérez un MatchData objet, qui a une méthode captures, qui renvoie les valeurs correspondantes par les groupes de capture dans un tableau:

first, second, third = var.match(/.../).captures

3 pour la réponse № 2

Une autre façon, que vous pouvez aller:

var = "foo 123  456  789   bar"
/^foo +(?<first>d+) +(?<second>d+) +(?<third>d+) +bar$/ =~ var

Cela attribue automatiquement les captures aux variables locales.
Remarque: str =~ regexp ne fonctionnera pas ici. Seulement regexp =~ str.

Pour autant que je sache, il s’agit d’une fonctionnalité du moteur Oniguruma, donc elle fonctionne dans la version 1.9.
http://www.ruby-doc.org/ruby-1.9/classes/Regexp.html#M001100


1 pour la réponse № 3
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"]

Notez que Regex#match reviendra nil si aucune correspondance n'est trouvée, mais nil.to_a retourne un tableau vide, ce qui précède est sans danger.