irb(main):001:0> r = /[A-Za-z]\d/ #1文字目が英字、2文字目が数字の正規表現
=> /[A-Za-z]\d/
irb(main):002:0> p r =~ "abc123" #正規表現でマッチング
2
=> 2
irb(main):003:0> p $& #マッチした文字列
"c1"
=> "c1"
irb(main):004:0> p $` #マッチした文字列の前の文字列
"ab"
=> "ab"
irb(main):005:0> p $' #マッチした文字列の後の文字列
"23"
=> "23"
irb(main):006:0> p /ABC/ =~ "abc123" #マッチしない場合はnilを返す
nil
=> nil
わかりずらくて大変すみません。。
なぜ2になるのか
ということをまず教えていただけますでしょうか。
ちなみにプログラミングはVBAしか経験なしです。。
どのレベルの質問なのかよくわかりません。
・正規表現が全くわからない
・正規表現がマッチするという概念がわからない
・マッチするのはわかるが、r =~ "abc123" の値の2の意味がわからない
など、など。
・正規表現がマッチするという概念がわからない
・マッチするのはわかるが、r =~ "abc123" の値の2の意味がわからない
というのが近いと思います。
例えば
irb(main):001:0> str = "abc,aabbcc,aaabbbccc"
=> "abc,aabbcc,aaabbbccc"
irb(main):002:0> str.gsub(/a+/, "z")
=> "zbc,zbbcc,zbbbccc"
というのはロジックとしてはわかりやすいので理解できます。
今回の質問の件では、なぜそうなるのかがわからないというイメージです。
最初にヒットしたインデックスが表示されるというのはわかったのですが、
いまいち完全な理解には及んでいません、、
やっぱりよくわかりません。
「何のためにこの機能があるのかわかりにくい」
ということでしょうか?