読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【ruby】gsubで複数の文字パターンを置換する&後方参照する場合

ruby

小さなことですが…

複数の文字パターンを置換する


gsubで複数の文字を置換したい場合、メソッドチェーン?で
置換文字数分gsubを呼ばなきゃならんと思っとりました。

"hogeはfugaです。".gsub("hoge", "私").gsub("fuga", "男")

 #=> "私は男です。"


実は置換する対象をハッシュで渡せるとはつゆ知らず…
参照:gsub, gsub! (String) - Rubyリファレンス
ruby1.9

"hogeはfugaです。".gsub(/hoge|fuga/, "hoge" => "私", "fuga" => "男")

 #=> "私は男です。"


第1引数で渡した正規表現に該当する文字を、第2引数のパターンにそって
置換してくれるようです。


でもなんかもっと素直に書ける方法がありそうな気がするが。


後方参照する場合

正規表現を使った場合、括弧で囲んだ部分をあとで
下記のように呼び出せますよね

"私は男です。" =~ /(.)は(.)です/

puts $1    #=> 私
puts $2    #=> 男


gsugでも正規表現使って置換できるので同じことできるのですが、
書き方が少し違う。


〜大変助かりました!!〜
(DTPtechNote:1086) [ruby] subメソッドで後方参照



こう書かねばならない。

# バックスラッシュ+数字をシングルクォートで囲う
"私は男です。".gsub(/^(.)は/, '\1とあなたは')    #=>"私とあなたは男です。"

#もしくは

# ブロック内で処理
"私は男です。".gsub(/^(.)は/) {$1 + "とあなたは"}    #=>"私とあなたは男です。"


知らなくて少し困ったよ…(´・ω・`)