はじめてのRuby!grepメソッドで正規表現に一致する文字列を取得

配列を使っていると、ある条件に一致した要素のみを検索して取得したい場合があります。

「配列から正規表現のパターンにマッチした要素を取得したい」
「配列から特定の型に一致する要素を取得したい」

配列を正規表現にマッチしたパターンの要素のみを取得したい場合は、grepメソッドを使用すると便利です。

ここではそんなgrepメソッドについて、以下の内容で解説していきます。


・grepメソッドとは
・そもそも正規表現とは
・grepメソッドの使い方

grepメソッドについて、わかりやすく解説していますので、ぜひ参考にしてください。

grepメソッドとは

grepメソッドは、引数に指定したオブジェクトと配列の各要素を「オブジェクト === 各要素」で評価し、結果が真の場合の要素を取得して配列として返します

grepメソッドは以下のように記述します。

配列.grep(オブジェクト)

正規表現を指定した場合は、パターンにマッチした要素を取得して返します。

引数には正規表現の他、クラスを指定した場合は一致したクラスに属した要素を取得します。

そもそも正規表現とは

grepメソッドの使い方に入るまえに正規表現についておさらいしておきましょう。

正規表現は主にパターンにマッチした文字列を取得するために使われるもので、あらゆる文字列を検証することができます。

そんな正規表現の基礎の基礎については、以下の記事で詳しく解説しています。

grepメソッドの使い方

正規表現を指定する方法

以下のサンプルでは、grepメソッドの引数に正規表現を指定してパターンにマッチした要素を取得しています。

array = ["1111", "apple", "2222", "orange", "3333", "melon"]

p array.grep(/^[0-9]+$/)
p array.grep(/^[a-z]+$/)

実行結果:

[“1111”, “2222”, “3333”]
[“apple”, “orange”, “melon”]

最初の引数では数字の0〜9だったら取得するパターンを指定し、2番めの引数にはアルファベットのa-zだったら取得する正規表現のパターンを指定しています。

実行結果のとおり、数字と文字列をそれぞれ取得できていることがわかりますね!

クラスを指定する方法

grepメソッドは引数にクラスを指定すると、そのクラスに一致した型の要素を返します。

以下のサンプルをご覧ください。

array = [1111, 10.1, "apple", 10.2, 2222, "orange", 3333, "melon"]

p array.grep(Integer)
p array.grep(String)
p array.grep(Float)

実行結果

[1111, 2222, 3333]
[“apple”, “orange”, “melon”]
[10.1, 10.2]

このサンプルでは、Integer、String、Floatのクラスを引数にそれぞれ指定し、一致した型の要素を配列として返しています。

ブロックを指定する方法

grepメソッドにブロック処理を記述することによって、grepメソッドの結果が真の要素に対してブロックの処理を実行することができます。

以下のサンプルではパターンにマッチした要素に対して、ブロックの処理でそれぞれ大文字と小文字に変換した配列を返しています。

array = ["1111", "apple", "2222", "ORANGE", "3333", "melon", "BANANA"]

p array.grep(/^[A-Za-z]+$/) {|item| item.upcase }
p array.grep(/^[A-Za-z]+$/) {|item| item.downcase }

実行結果:

[“APPLE”, “ORANGE”, “MELON”, “BANANA”]
[“apple”, “orange”, “melon”, “banana”]

まとめ

ここでは条件に一致する配列の要素を取得するのに便利なgrepメソッドについて解説しました。

・grepメソッドとは
・そもそも正規表現とは
・grepメソッドの使い方

grepメソッドを使用すれば、簡単に正規表現などでマッチする要素を取得できますので使い方についてはよく理解しておきましょう。

もし、grepメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

プログラミング学習を効率良く進めたいなら…

学習を始めたけどエラーが解決できない
作りたいものはあるけど、何から始めればいいかわからない
プログラミングに対して、このような悩みを持っている方も多いですよね。

そんな方には、弊社が運営するサブスク型のプログラミングスクール「SAMURAI ENGINEER Plus+がおすすめです。



月額2980円(税別)で、主に4つのサービスを提供させていただきます。

  • 現役エンジニアによる月1度の「マンツーマン指導」
  • 平均回答時間30分の「Q&Aサービス」
  • 作りながら学べる28種類の「教材」
  • 学習を記録&仲間と共有できる「学習ログ」

目的にあった教材を選べば、どなたでも効率よく学習できるほか、Q&Aサービスやマンツーマン指導を活用することで、挫折せずにプログラミングの習得が可能です。

プログラミングを効率的に学びたい人はもちろん、何から始めたらよいのかわからない方は、ぜひ「SAMURAI ENGINEER Plus+」をご利用ください。
まずは30日無料体験

書いた人

侍テック編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら