その他
    ホーム 技術発信 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!メソッドを使うと文字列自体を変更してしまうので、

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

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

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

    記事を共有