Ruby で文字列置換をしたいと思って頭を悩ませた。なんとか出来たのでメモ。
文字列[置換される文字列] = 置換する文字列
という構文を使う。サンプル。
str = "This is perl test"
p str
str["perl"] = "ruby"
p str
これを実行する。出力は以下の通り。
"This is perl test" "This is ruby test"
上手く行った。
一手間かける
このままだと、文字列 str
が文字列「perl」を含んでいるかどうかが分からない。include?
を使う。
str = "This is perl test"
pl = "perl"
if str.include?(pl)
str[pl] = "ruby"
end
p str
出力を見てみる。
"This is ruby test"
う〜ん、この判定は必要なのかな? 分からないや。一応、念のため。
配列を使って
本当は、絶対 URL を相対 URL に変えたかった。ただし、ほとんどの絶対 URL は外へのリンクとして残しておいて、一部の URL だけ相対 URL に変えたかった。本来のコードは、こうなってる。予め相対リンクにする URL をリスト・アップしておいて each
で回す。
IMAGE = [
"http://www.foo.org/bar.png",
"http://www.hogehoge.net/o/NNN_NNNN.jpg",
"http://sample.net/more.png"
]
IMAGE.each { |img|
if line.include?(img)
line[img] = "external/" + File.basename(img)
end
}
出力例はもう出さないよ。これで、絶対 URL の画像を external ディレクトリー以下から参照するように変更できた。
あとがき
置換と言えば正規表現なのだけど、URL を正規表現に変えるのが面倒で... なんかコストもかかりそうだったし。文字列で置換が出来ないものかと調べて、この方法に辿りついた。
もっと良い方法があったり、間違いを犯しているようならご指摘たまわりたい。
ref
- class String (Ruby 1.9.2 リファレンスマニュアル)
No comments:
Post a Comment