ruby正则表达式开始方法有点混乱

Rog*_*ger 0 ruby regex

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
Run Code Online (Sandbox Code Playgroud)

我期待m.begin(1)返回2,因为X是字符串开头后的两个元素.

我正在读这本书,这本书很好地基于rubyist

要获取捕获n的信息,请提供n作为开始和/或结束的参数.

同样地,我正在考虑m.begin(2)来重新演绎3.

enn*_*ler 8

仔细读:

返回字符串中匹配数组的第n个元素的开头的偏移量.

所以匹配数组实际上是[HX1138,H,X,113,8]

所以

   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"
Run Code Online (Sandbox Code Playgroud)