この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
初めましてこんばんわ、トマトです。
まだまだひよっこな私ですが、日々Ruby on Railsに悪戦苦闘しております。
さて、今回は何かとよく使われる、
文字列の一部を置換するメソッドをご紹介したいと思います。
○gsubメソッド
このメソッドは引数を2つとります。
第1引数では正規表現を使って置換したい部分のパターンを指定し、
第2引数では第1引数のパターンでマッチした部分と入れ替える文字列を指定します。
文字列.gsub(/マッチさせたいパターン/,'置換したい文字列')
。。。とまぁ、言葉で表すとわかりづらいので
実際に使ってみましょう。
str = "red$blue$$green$$$yellow$$$$pink"
p str.gsub(/\$+/,' ')
# 出力結果
# "red blue green yellow pink"
このように置換することができるんですね。
実用的な使い方の例としては、場合によって”http”と”https”とで出し分ける際に
img = "http://tomato.com/product/img/tomato.jpg"
my_img = ""
if flg==1
my_img = img.gsub(/\^http/,'https')
else
my_img = img
end
上のように記述をすれば、簡単です。
○subメソッドとの違い
gsubメソッドとすごくよく似ているメソッドがsubメソッドです。
名前がそっくりならば、機能もやっぱりそっくりです。
ためしに使い比べてみましょう。
img = "http://tomato.com/product/img/tomato.jpg"
p img.gsub(/tomato/,'banana')
# gsub出力結果
# "http://banana.com/product/img/banana.jpg"
p img.sub(/tomato/,'banana')
# sub出力結果
# "http://banana.com/product/img/tomato.jpg"
よく見てみるとgsubメソッドでは、”tomato” にマッチした部分
すべてを置換しているのに対して、
subメソッドでは最初の”tomato”にマッチした部分のみ
置換しているのがわかります。
要するに
○gsubメソッド=すべて置換する
○subメソッド=先頭だけ置換する
ということなのです。
○gsub!、sub!メソッド
gsubとsubメソッドに”!”のついたこのメソッド。
これもちょっと使ってみましょう。
img = "http://tomato.com/product/img/tomato.jpg"
img.gsub(/tomato/,'banana')
p img
# gsub出力結果
# "http://tomato.com/product/img/tomato.jpg"
img.gsub!(/tomato/,'banana')
p img
# gsub!出力結果
# "http://banana.com/product/img/banana.jpg"
subメソッドやgsubメソッドでは置換後の文字列を
その都度生成して返しているのに対して、
sub!メソッドやgsub!メソッドを使うと文字列自体を変更してしまうので、
使用する際には注意が必要です。
やけに長くなりましたが、以上文字列置換メソッドの紹介でした。
また次回お会いしましょう。