カテゴリ: Ruby 更新日: 2026/03/10

Rubyのgrepとgrep_vを完全マスター!正規表現でパターン抽出の基本

grep/grep_v でパターン抽出:正規表現・クラスマッチの活用術
grep/grep_v でパターン抽出:正規表現・クラスマッチの活用術

先生と生徒の会話形式で理解しよう

生徒

「Rubyでたくさんのデータの中から、特定の文字が含まれるものだけを見つけ出すにはどうすればいいですか?」

先生

「それならgrep(グレップ)という便利な命令がありますよ。これを使うと、条件に合うものを探したり、逆に合わないものを除外したりすることが簡単にできるんです。」

生徒

「特定の文字だけじゃなくて、数字だけを探したり、特定のグループに属するものも探せますか?」

先生

「もちろんです!正規表現やクラスという仕組みを組み合わせれば、自由自在に抽出できます。基本的な使い方を見ていきましょう!」

1. grepメソッドとは?

1. grepメソッドとは?
1. grepメソッドとは?

Rubyのgrep(グレップ)は、配列(データの集まり)の中から、特定の条件に一致する要素だけを抜き出すためのメソッドです。パソコン初心者の方に分かりやすく例えると、たくさんの書類の中から「特定のキーワードが書いてある紙」だけをピックアップする作業のようなものです。

例えば、果物の名前がたくさん入ったリストの中から「リンゴ」という文字が含まれるものだけを取り出したいときに大活躍します。この「探し出す機能」をプログラミング用語でパターンマッチングと呼びます。grepを使うことで、大量のデータから必要なものだけを瞬時に見つけることができるようになります。

2. grepの基本的な書き方:文字列を探す

2. grepの基本的な書き方:文字列を探す
2. grepの基本的な書き方:文字列を探す

まずは一番シンプルな使い方を見てみましょう。配列に対して .grep と書き、その後のカッコの中に探したいパターンを指定します。Rubyで「特定の文字が含まれるか」を調べる際は、スラッシュ / で文字を囲む正規表現(せいきひょうげん)という書き方を使います。

例えば、リストの中から「apple」が含まれるものを探すコードは以下のようになります。プログラミング未経験の方は、まず「スラッシュで囲った文字を探すんだな」と覚えるだけで大丈夫です。


fruits = ["apple", "banana", "pineapple", "orange"]
# "apple" という文字が含まれるものを探す
result = fruits.grep(/apple/)
p result

["apple", "pineapple"]

実行結果を見ると、単なる「apple」だけでなく、「pineapple」も選ばれていますね。これは「appleという文字が含まれているかどうか」で判断しているからです。このように、部分一致でデータを探せるのがgrepの便利なポイントです。

3. 逆の抽出!grep_vで仲間外れを探す

3. 逆の抽出!grep_vで仲間外れを探す
3. 逆の抽出!grep_vで仲間外れを探す

「特定の条件に合うもの」ではなく、逆に「特定の条件に合わないものだけ」を集めたいときもあります。そんなときに使うのが grep_v です。名前の最後にある v は、検索の世界で「一致しないものを表示する」という意味の記号から来ています。

例えば、お菓子のリストの中から「チョコ」が含まれるものを除外して、それ以外のものだけを抜き出したいときに使います。これを活用すれば、不要なデータを取り除く「フィルタリング」という作業がとても楽になります。


foods = ["チョコパイ", "ガム", "チョコケーキ", "ポテトチップス"]
# "チョコ" が含まれていないものだけを抜き出す
result = foods.grep_v(/チョコ/)
p result

["ガム", "ポテトチップス"]

4. クラスマッチ:データの種類で分類する

4. クラスマッチ:データの種類で分類する
4. クラスマッチ:データの種類で分類する

grepのすごいところは、文字だけでなくデータの種類(クラス)で探し出せることです。Rubyでは、数字は Integer(インテジャー)、文字は String(ストリング)というように、すべてのデータに種類(型)が決まっています。

一つの配列の中に数字と文字が混ざってしまっている場合、grepを使えば「数字だけ」を抜き出すことが可能です。カッコの中に正規表現(スラッシュ)ではなく、クラスの名前を直接書くのがコツです。これはデータの整理整頓に非常に役立ちます。


mixed_data = ["こんにちは", 100, "さようなら", 200, 300]
# 数字(Integerクラス)だけを探し出す
numbers = mixed_data.grep(Integer)
p numbers

[100, 200, 300]

5. 正規表現を使いこなして複雑な条件を作る

5. 正規表現を使いこなして複雑な条件を作る
5. 正規表現を使いこなして複雑な条件を作る

正規表現(せいきひょうげん)を少し詳しく知ると、grepのパワーはさらに高まります。例えば、記号を組み合わせることで「特定の文字で始まるもの」や「数字で終わるもの」といった細かいルールを作れます。

  • /^A/ : 先頭が「A」で始まるもの
  • /s$/ : 最後が「s」で終わるもの
  • /[0-9]/ : 何らかの数字が含まれるもの

これらは一見すると暗号のように見えますが、使いこなせるようになると、大量の会員データから「郵便番号だけ」を抜き出したり、「メールアドレスの形式になっているもの」だけを抽出したりといった、プロ級の処理ができるようになります。

6. 抽出と同時に加工する!ブロックの活用術

6. 抽出と同時に加工する!ブロックの活用術
6. 抽出と同時に加工する!ブロックの活用術

grepのもう一つの強力な機能は、抜き出したデータをその場で加工できることです。do ... end やカッコ { } を使って処理内容(ブロック)を書くと、抽出された一つひとつのデータに対して命令を実行できます。

例えば、「名前に『さん』が含まれる人を抜き出して、全員に『様』を付けて表示する」といった一連の流れを、grepだけで完結させることができます。抽出してから別の場所で加工するという手間が省けるため、プログラムが非常にスッキリします。


members = ["田中さん", "鈴木さん", "佐藤くん", "高橋さん"]
# "さん" がつく人を探して、全員を「様」付けに変換する
result = members.grep(/さん/) { |name| name.gsub("さん", "様") }
p result

["田中様", "鈴木様", "高橋様"]

gsub は文字を置き換える命令です。ここでは「さん」を「様」に置き換えています。

7. Enumerableモジュールとgrepの関係

7. Enumerableモジュールとgrepの関係
7. Enumerableモジュールとgrepの関係

実はgrepは、RubyのEnumerable(エニュメラブル)という仲間たち(モジュール)が提供している機能の一つです。Enumerableは、配列のように「たくさんのデータが並んでいるもの」を便利に扱うための詰め合わせセットのようなものです。

配列だけでなく、ハッシュ(キーと値のセット)や範囲(1から10までなど)に対しても、この仲間たちは共通のルールで動いてくれます。grepを覚えることは、Rubyでデータを扱うための最も強力な武器を手に入れることに等しいのです。プログラミング初心者の方は、この「共通の便利機能」という考え方を意識しておくと学習がスムーズになります。

8. 範囲(Range)での活用法

8. 範囲(Range)での活用法
8. 範囲(Range)での活用法

grepは「1から100まで」のような範囲(Range)に対しても使えます。例えば、数値の範囲の中から特定の数字が含まれているかをチェックしたり、特定の条件に合う数だけを取り出したりすることができます。

あまり知られていない使い方ですが、「10から20までの範囲に含まれるもの」という条件自体をgrepのパターンとして使うことも可能です。これにより、配列の中にあるバラバラな数字の中から「特定の範囲に収まっているもの」だけを瞬時に見つけることができます。これは統計データの処理などで非常に便利です。


scores = [5, 12, 45, 18, 99, 20]
# 10から20の範囲に含まれる数字だけを抽出
result = scores.grep(10..20)
p result

[12, 18, 20]

9. grepを使う際の注意点:大文字と小文字

9. grepを使う際の注意点:大文字と小文字
9. grepを使う際の注意点:大文字と小文字

grepで文字を探すときに初心者がハマりやすいのが、大文字と小文字の区別です。標準の設定では、正規表現は /apple//Apple/ を別のものとして扱います。もし「大文字でも小文字でもどっちでもいいから探してほしい」という場合は、スラッシュの最後に i というオプションを付けます。

grep(/apple/i) と書けば、「APPLE」も「Apple」も「apple」もすべて見つけてくれます。このように、ちょっとした書き方のルールを知っているだけで、思い通りにデータを操れるようになります。パソコンを触り始めたばかりの方は、まずはこの「iオプション」を覚えておくと失敗が少なくなります。

10. 保守性の高いコードを目指して

10. 保守性の高いコードを目指して
10. 保守性の高いコードを目指して

プログラミングにおいて大切なのは、ただ動くことだけではなく、後から自分や他の人が見たときに「何をしようとしているか」が分かりやすいことです。grepは、複雑な繰り返し処理(ループ)を書かなくても一行で目的を達成できるため、コードが非常に読みやすくなります。

「if文を使って一つずつ中身をチェックして、新しい配列に追加して…」と書くよりも、grep 一つで書くほうが、意図がはっきりと伝わります。こうした「Rubyらしい」スマートな書き方を身につけることで、あなたのプログラムはより洗練され、ミスが少なくなります。まずは身近なデータの整理から、grepを使ってみてくださいね!

カテゴリの一覧へ
新着記事
New1
Ruby
Rubyの文法超入門:式と文・endの役割をやさしく解説
New2
Rails
Nodeは本当に不要?Railsのimportmap最小構成とjsbundling構成の違いと選び方
New3
Rails
Rails開発で使うデータベースの選び方とSQLite・MySQL・PostgreSQLの初期設定
New4
Ruby
Ruby環境構築の最終チェック!セットアップ失敗あるあると確認リスト
人気記事
No.1
Java&Spring記事人気No1
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.4
Java&Spring記事人気No4
Ruby
RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう
No.5
Java&Spring記事人気No5
Ruby
プロキシ環境でも安心!社内ネットワーク下でのRuby gemインストール完全ガイド【SSL対応も解説】
No.6
Java&Spring記事人気No6
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.7
Java&Spring記事人気No7
Rails
asdfで複数言語を一元管理:Ruby/Node/psql をまとめてセットアップ
No.8
Java&Spring記事人気No8
Ruby
Rubyのany? all? none? one? を完全攻略!条件判定を劇的に短く書く方法