あーるPG - 社会人のデジタル生活

日曜プログラマになろうかなーと思った30代理系社会人の、キャリアアップや趣味(特にデジタル情報)の記録。らーめんとビールが好き。

高度な置換

str = "[00-01-30] hoge"
p "原文:" + str

p str[/00/] = "99"  # [] で簡単に置換

p str.gsub(/01/, "88") # gsubで置換.
p str.gsub(/([^-])(\d\d)/, "[**") # ()で分割
p "結果 $1:" + $1 + "  , $2:" + $2  # すると、結果が$1, $2...で利用できる

p str.gsub(/hoge/, $1) #が、gsub内では利用できず、前の結果が使われる

p str.gsub(/(\[)([-\d]+)(\])/){|matched|  #ブロック内では利用できる
  p "結果 $1:" + $1 + "  , $2:" + $2  # 
  "(" + $2 + ")"  #最後の評価結果で置換される 
}

結果

$ ./test.rb
"原文:[00-01-30] hoge"
"99"
"[99-88-30] hoge"
"[**-01-30] hoge"
"結果 $1:[  , $2:99"
"[99-01-30] ["
"結果 $1:[  , $2:99-01-30"
"(99-01-30) hoge"

テキストエディタの置換は便利だけどgsubあんまり便利じゃないなーと思ってたら、ブロック文ならなんでもいけるのね。Rubyすげー。
例ではmatchedは捨ててるけど当然使えマス。