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番目の括弧にマッチした値 |