Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyのgsubメソッド徹底解説!正規表現・ブロック・ハッシュで使いこなす3つのテクニック

今回はRubyのgsubメソッドについて、その使い方を詳しく解説していきます。gsubを試すには、まず操作対象となる文字列が必要です。

なぜなら、gsubの目的は文字列の一部を別の文字列に置き換えることだからです。

実は、「gsub」の「sub」は「substitute(置換)」、「g」は「global(全体)」を意味しています。つまり、文字列内に現れる該当箇所をすべて置換するメソッドなのです。

例として、次のような文字列を用意しました:

str = "white chocolate"

ここで「white」という単語を「dark」に置き換えたいとしましょう。

その方法がこちらです:

str.gsub("white", "dark")

このコードの意味はこうです:

文字列strの中で、最初の引数(white)に一致する箇所をすべて、2番目の引数(dark)に置き換えます。

これでおいしいチョコレートに大変身…と思いきや、残念ながらこれはただの文字列なので食べられません 🙂

さて本題ですが、Rubyのgsubメソッドは、こんな単純な置換にとどまらず、もっと多くのことができるのです。

具体的な例を見ていきましょう。

1. 正規表現でパターンを置換する

単一の単語を置き換えるだけでも便利ですが、もし「パターン」を置き換えられたらどうでしょうか?

たとえば:

年号、メールアドレス、電話番号など、決まった形式を持つ文字列のことです。

実はそれが可能です!

具体例を見てみましょう:

"a1".gsub(/\d/, "2")

# "a2"

最初の引数には正規表現を指定しています。正規表現についての詳細はここでは割愛しますが、簡単に言えばパターンマッチングのための言語です。

この例では、\dが数字を表しており、「a1」の中の「1」にマッチしています。

さらに、こんなこともできます:

"a1".gsub(/(\w)(\d)/, '\2\1')

実行結果はこちら:

"1a"

文字の順番が入れ替わりました!

これは「キャプチャグループ」と呼ばれる機能を使ったテクニックです。括弧()で囲んだ部分がグループとして記録され、置換後の文字列の中で\1が1番目のグループ、\2が2番目のグループとして参照できます。

2. ブロックを使った高度なgsub

gsubにブロックを組み合わせると、処理の幅が一気に広がります。

なぜでしょうか?

それは、ブロックの中ではロジック(条件分岐など)を使って、置換内容を動的に決められるからです。固定値を渡す場合とは大違いですね。

例を見てみましょう:

"dog".gsub(/\w+/) { |animal| animal == "dog" ? "cat" : "dog" }

\w+は「1文字以上の英数字」を意味するパターンで、これで動物の名前を見つけます。

そして、ブロック内では次のような判定を行っています:

  • 見つかった単語が「dog」なら「cat」に置き換える
  • それ以外の単語なら「dog」に置き換える

このような条件付きの処理は、固定値である第2引数だけでは実現できません。ブロックを使うからこそ可能になる、柔軟な置換方法です。

3. ハッシュで複数の単語を一括置換する

置換ルールが複数ある場合は、ハッシュを使うと便利です。

たとえば、こんなハッシュを用意します:

colors = {
  "B" => "blue",
  "G" => "green",
  "R" => "red"
}

これは翻訳辞書のように機能し、キーに一致した部分が対応する値に置き換えられます。

実際の使用例です:

"BBBGR".gsub(/\w/, colors)

実行結果はこちら:

"bluebluebluegreenred"

注意点として、第1引数の正規表現がハッシュのキーとマッチするように設計することが重要です。

この例では、\wが1文字ずつマッチするため、「B」「G」「R」がそれぞれ対応する色名に置き換えられています。

まとめ

Rubyのgsubメソッドについて学びました!これは文字列内の文字を置換できる強力なメソッドです。

主な活用シーンは以下の通りです:

  • 不正な文字の除去(第2引数に空文字列を指定)
  • プレースホルダーや略称を正式な値に置き換え
  • パターンやロジックを使った柔軟な文字列変換

Rubyのgsubメソッド徹底解説!正規表現・ブロック・ハッシュで使いこなす3つのテクニック

ぜひご自身でもこのメソッドを練習して、新しい知識をしっかり定着させてくださいね。

最後までお読みいただきありがとうございました 🙂

  1. Rubyのmapメソッド完全ガイド!配列・ハッシュのデータ変換を実例で解説

    Rubyのmapメソッドは、配列(Array)・ハッシュ(Hash)・範囲(Range)といったコレクションに対して使用できる強力なメソッドです。 mapの主な用途は、データの変換です。 例えば、文字列の配列があった場合、すべての文字列を順番に処理して、各文字を大文字に変換することができます。 また、Userオブジェクトのリストがある場合も同様です。 それらを変換して、対応するメールアドレスや電話番号など、Userクラスに定義された任意の属性のリストを作成できます。 それでは、具体的な使い方を見ていきましょう! Ruby mapメソッドの基本構文 mapの構文は次のようになっています。 a

  2. RubyのStructとOpenStructの使い方を徹底解説!値オブジェクトを簡単に作る方法

    Rubyには、関連する属性をまとめて保持する「値オブジェクト」を手軽に作れるStructという組み込みクラスが用意されています。本記事では、Structの基本的な使い方から注意点、そしてOpenStructとの違いまで詳しく解説します。 そもそもStructとは何か? StructはRubyに組み込まれたクラスで、新しいクラスを動的に生成し、値オブジェクト(Value Object)を作成するために使われます。値オブジェクトとは、関連性のある複数の属性をひとまとめにして扱うためのオブジェクトです。 具体例を挙げてみましょう。 2つの座標(xとy)を持つPointというデータを表したい場合、この