アインシュタインの電話番号
2011.03.19
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番目の括弧にマッチした値|


組み込み変数 - Rubyリファレンスマニュアル