ホーム DoRuby 文字列の一部を置換したい

文字列の一部を置換したい

この記事はアピリッツの技術ブログ「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!メソッドを使うと文字列自体を変更してしまうので、

使用する際には注意が必要です。

やけに長くなりましたが、以上文字列置換メソッドの紹介でした。

また次回お会いしましょう。

記事を共有

最近人気な記事