高度な置換
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は捨ててるけど当然使えマス。