今更ながら地味にはまってしまったのでメモ
ちなみに$1,$2...
って組み込み変数って言うんですね
間違った方法
p 'aiueo'.gsub(/(e)/, "#{$1}")
とした時に$1
にe
が入ってると思ったら間違いで
この文字列が評価される時点ではまだ正規表現マッチが行われておらず、 $1 がセットされていない
だそうです
正しい方法
その1
文字列で処理する方法
p 'aiueo'.gsub(/(e)/, "\\1")
p 'aiueo'.gsub(/(e)/, '\1')
p 'aiueo'.gsub(/(e)/, '\\1')
その2
ブロックを渡す方法
p 'aiueo'.gsub(/(e)/) { $1 }
こちらの場合は$1,$2...
が使えるみたいです
参考
リファレンスにも書いてあることだったので、詳しくは以下
instance method String#gsub