LoginSignup
7
4

More than 5 years have passed since last update.

Rubyのsub,gsubでマッチした部分を取り出す

Last updated at Posted at 2015-01-03

今更ながら地味にはまってしまったのでメモ
ちなみに$1,$2...って組み込み変数って言うんですね

間違った方法

p 'aiueo'.gsub(/(e)/, "#{$1}")

とした時に$1eが入ってると思ったら間違いで

この文字列が評価される時点ではまだ正規表現マッチが行われておらず、 $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

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4