2009-09-25 5 views
0
m = /(.)(.)(\d+)(\d)/.match("THX1138.") 

puts m[0] 

c = m.captures #=> HX1138 

puts c[0] #=> H 
puts m.begin(0) #=> 1 

puts c[1] #=> X 
puts m.begin(1) #=> 1 

puts c[2] #=> 113 
puts m.begin(2) #=> 2 

Je m'attendais à ce que m.begin (1) renvoie 2 puisque X est deux éléments après le début de la chaîne.ruby ​​expression régulière begin méthode un peu confuse

Je lis le livre qui dit well grounded rubyist

Pour obtenir les informations pour la capture n, vous fournissez n comme argument pour commencer et/ou à la fin.

De même j'expecing m.begin (2) à rerturn 3.

Répondre

8

Lisez attentivement:

renvoie le décalage du début de l'élément n-ième du tableau de correspondance dans la chaîne.

Donc, le tableau de correspondance est en fait [HX1138, H, X, 113,8]

SO

m.begin(0) => offset of HX1138 => 1 in "THX1138" 
    m.begin(1) => offset of H => 1  in "THX1138" 
    m.begin(2) => offset of X => 2  in "THX1138" 
+0

Je modifié la question initiale et a ajouté que le livre rubyist bien dit à la terre. On dirait que j'ai mal imprimé dans le livre. Merci pour la réponse. – Roger