2013-03-02

Ruby で文字列置換 〜 正規表現を使わずに

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