Rubyの正規表現で使える組み込み変数
似たような記号が多くて覚えづらいので書き出してみた。
正規表現用の組み込み変数
以下のコードを実行した場合の出力結果を横にコメントで書いてみた。最低限覚えておいたほうがいいのは「$&」と「$数字」かな。ほかは使わないとすぐ忘れそう、というか使いたい時に思い出せなさそう。
"hoge fuga piyo poyo" =~ /(f\w+)\s(\w+)/
p $~  #=> #<MatchData "fuga piyo" 1:"fuga" 2:"piyo">
p $&  #=> "fuga piyo"
p $`  #=> "hoge "
p $'  #=> " poyo"
p $+  #=> "piyo"
p $1  #=> "fuga"
p $2  #=> "piyo"それぞれの記号の解説と覚え方を、リファレンスマニュアルから抜粋。
| 変数 | 覚え方 | クラスメソッド | 説明 | 
|---|---|---|---|
| $~ | 「~」はマッチに使われる | Regexp.last_match | 現在のスコープで最後に成功したマッチに関する MatchData オブジェクト | 
| $& | いくつかのエディタでの「&」と同じ | Regexp.last_match[0] | 現在のスコープで最後に成功した正規表現のパターンマッチでマッチした 文字列 | 
| $` | 「`」は文字列の前に置かれる | Regexp.last_match.pre_match | 現在のスコープで最後に成功した正規表現のパターンマッチでマッチした 部分より前の文字列 | 
| $' | 「`」は文字列の後ろに置かれる | Regexp.last_match.post_match | 現在のスコープで最後に成功した正規表現のパターンマッチでマッチした 部分より後ろの文字列 | 
| $+ | be positive and forward looking. | Regexp.last_match[-1] | 現在のスコープで最後に成功した正規表現のパターンマッチでマッチした 中で最後の括弧に対応する部分文字列 | 
| $1 | 「\1」のようなもの | Regexp.last_match[1] | 最後に成功したパターンマッチで1番目の括弧にマッチした値 | 
| $2 | 「\2」のようなもの | Regexp.last_match[2] | 最後に成功したパターンマッチで2番目の括弧にマッチした値 |