28567


文字列をマッチさせて数値に変換する時に

[code]

    '10'.match(/(100)/){ $1 } # => nil
    
[/code]

なので、`to_i`をつければ`0`を返してくるかと思ったのですが、変わらず`nil`を返してきます。

[code]

    '10'.match(/(100)/){ $1.to_i } # => nil
    
[/code]

不思議だったのでクラス名を取ろうと思ったのですが

[code]

    '10'.match(/(100)/){ p $1.class } # => nil
    
[/code]

でも何も返ってきません。  
正規表現でマッチした値を返す `$1` などの特殊変数はどう規定されていて  
どこのドキュメントに振る舞いが書かれているのでしょうか？


CC BY-SA 3.0
2016-08-29T17:36:57.623
28566
2016-08-29T18:54:26.957
3271
question
ruby
String#matchの正規表現にマッチした物が無い時に特殊変数に入る値について


マッチしなかった場合、ブロックは実行されません。

`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


CC BY-SA 3.0
2016-08-29T18:54:26.957
28567
2016-08-29T18:54:26.957
76
28566
answer