質問: 文字列をマッチさせて数値に変換する時に ``` '10'.match(/(100)/){ $1 } # => nil ``` なので、`to_i`をつければ`0`を返してくるかと思ったのですが、変わらず`nil`を返してきます。 ``` '10'.match(/(100)/){ $1.to_i } # => nil ``` 不思議だったのでクラス名を取ろうと思ったのですが ``` '10'.match(/(100)/){ p $1.class } # => nil ``` でも何も返ってきません。 正規表現でマッチした値を返す `$1` などの特殊変数はどう規定されていて どこのドキュメントに振る舞いが書かれているのでしょうか?
回答: マッチしなかった場合、ブロックは実行されません。 `ri String.match` より: > > If a block is given, invoke the block with MatchData **if match succeed** > > > `$1` などの変数については、`ri Regexp` (Special global variables) には以下のような記載があります。マッチさせた時点で、該当するデータが無いもの (キャプチャの括弧が1個の場合で `$2` を参照した場合など; 失敗した場合を含む) は `nil` になりますが、明確な記載は見つけられませんでした。 > > $1, $2 and so on contain text matching first, second, etc capture group > > >