スライドショー

もう悩まない!Rubyの検索方法を3つのパターン別で紹介

Rubyで文字列や配列を検索する方法がよくわからない…
Rubyで正規表現を使用して一致する文字列を検索したい
Rubyで検索する方法はたくさんあるけど、やり方をすぐ忘れてしまう

Rubyで検索するためのメソッドはたくさん用意されていますが、どんなときにどのメソッドを使えばいいのか、全てを理解している方は少ないのではないでしょうか?

こんにちは!エンジニアとしてさまざまな開発に携わってきたヤマシタです。この記事ではRubyで検索する方法についてパターン別におすすめの検索方法を解説していきます。

Rubyを勉強し始めた初心者の方に必見の内容となりますので、ぜひ最後まで読んでいただいて、Rubyで検索する方法について理解を深めていただければと思います。

この記事はこんな人のために書きました

  • Rubyで検索する方法の基礎について学びたい方
  • パターン別に検索する方法について知りたい方

Rubyで検索する方法について、網羅的に解説していますのでぜひ参考にしてください。

Rubyで検索する3つのパターン

冒頭でも触れましたがRubyで文字列を検索する方法はたくさんあります。しかし、種類がありすぎてどんなときにどんなメソッドを使えばいいのか?忘れてしまいがちです。

実際の業務でも以下のような3つのパターンに直面することも多いと言えるでしょう。

  • 文字列の中に指定した文字列が含まれているか知りたい
  • 配列の要素に指定した文字列が含まれているか知りたい
  • 正規表現で一致した文字列を抽出する方法を知りたい

この記事では検索するときによく使用する以下のメソッドについてそれぞれ解説していきます。

メソッド動作返り値
index指定した文字列を検索文字列の位置
include?指定した文字列を検索真偽値
select条件に一致した要素を取得一致した要素の配列
reject条件に一致しない要素を取得一致しない要素の配列
grep正規表現にマッチした要素を取得マッチした要素の配列
match正規表現にマッチした部分文字列を取得マッチした文字列
sliceマッチした最初の文字列を取得マッチした文字列

Rubyで文字列を検索する方法

indexメソッド

indexメソッドは文字列の中に特定の文字列が含まれているか、確認するためのメソッドです。

indexの書き方

文字列.index(検索文字列)

文字列の中に検索文字列が含まれていた場合は、その文字列の位置(何文字目か?)を返します。検索文字列が含まれていなかった場合はnilを返します。

# 文字列を定義
fruits = "apple,orange,melon,banana,pineapple"

# 一致する文字列を検索
p fruits.index("apple")
p fruits.index("orange")
p fruits.index("banana")
p fruits.index("mango")

実行結果:

0
6
19
nil

実行結果のように文字列fruitsにindexメソッドを実行し、引数に文字列を指定することによって、文字列が見つかった場合は文字列の位置を返します。appleなら0文字目、orangeなら6文字目、mangoは存在しないためnilを返していることがそれぞれわかりますね。

include?メソッド

include?メソッドはindexメソッドと同様に指定した文字列を検索するメソッドです。indexメソッドとの違いとして、検索文字列が見つかった場合はtrueを、見つからなかった場合はfalseを返します。

include?の書き方

文字列.include?(検索文字列)

指定した文字列が存在するか、確認したいだけの場合に便利ですので、ぜひ使い方は覚えておいてください。

# 文字列を検索
fruits = "apple,orange,melon,banana,pineapple"

# 一致する文字列を検索
p fruits.include?("apple")
p fruits.include?("orange")
p fruits.include?("banana")
p fruits.include?("mango")

実行結果:

true
true
true
false

このようにinclude?メソッドの引数に指定した文字列が見つかったらtrue、見つからなかった場合はfalseを返していることがわかりますね。

include?メソッドは真偽値を返すため、そのまま条件式として使用することもできます。

# 文字列を検索
fruits = "apple,orange,melon,banana,pineapple"

# 条件によって処理を分岐
if fruits.include?("apple") then
    p "appleが見つかりました。"
else
    p "appleが見つかりませんでした。"
end

実行結果:

"appleが見つかりました。"

Rubyのif文については、以下の記事で詳細に解説していますのでぜひ参考にしてください。

Rubyで配列を検索する方法

selectメソッド

selectメソッドは条件式に一致した要素を取得するためのメソッドです。

selectの書き方

配列オブジェクト.select { |変数| ブロック処理 }

波括弧{}で囲った変数に要素を一つずつ格納していき、ブロック処理が真になった場合に要素を取得していきます。ブロック処理が真となった要素は新しい配列として返されます。

array = [1,2,3,4,5]

p array.select { |num| num > 3 }
p array.select { |num| num == 3 }
p array.select { |num| num <= 3 }

実行結果:

[4, 5]
[3]
[1, 2, 3]

実行結果のように、1番目では3以上、2番目は3と一致したもの、3番目は3以下という条件を満たしたものを返しています。戻り値は配列が返されていることもわかりますね。

また、以下のように文字列に対しても検索することが可能です。

fruits = ["apple","orange","banana","melon","pineapple"]

p fruits.select { |item| item.include?("apple") }
p fruits.select { |item| item.include?("orange") }
p fruits.select { |item| item.include?("mango") }

実行結果:

["apple", "pineapple"]
["orange"]
[]

このサンプルではブロック処理でinclude?メソッドを使用して指定した文字列が存在した場合は、新しい配列を作成しています。そんなselectメソッドについては以下の記事でも詳しく紹介していますので、ぜひ参考にしてください。

rejectメソッド

rejectメソッドは配列の要素分ブロックの処理を実行し、条件が偽の要素のみを取得するメソッドです。ブロック処理が偽となった要素は新しい配列として返されます。

rejectの書き方

配列オブジェクト.reject {|変数| ブロック}

波括弧{}で囲った変数に要素を一つずつ格納していき、ブロック処理が偽になった場合に要素を取得していきます。ブロック処理が偽となった要素は新しい配列として返されます。

# 配列を定義
array = [1,2,3,4,5]
 
# 偽の要素を取得
p array.reject { |num| num > 3 }
p array.reject { |num| num == 3 }
p array.reject { |num| num <= 3 }

実行結果:

[1, 2, 3]
[1, 2, 4, 5]
[4, 5]

1番目では3以上、2番目は3と完全に一致したもの、3番目は3以下という条件の結果が満たしていないもの返しています。先に紹介したselectメソッドとは全く逆の結果であることがわかりますね。

Rubyの正規表現で検索する方法

ここでは正規表現で文字列を検索するgrep、match、sliceメソッドについてそれぞれ解説していきます。


そもそも正規表現とは

正規表現は主にパターンにマッチした文字列を取得するために使われるもので、あらゆる文字列を検証することができます。
例えば[A-Z]ではアルファベットのAからZまでを表現し、数字の[0-9]では数値の0から9までを表現します。

grepメソッド

grepメソッドは引数に指定した正規表現のパターンが一致した要素を取得して配列として返すメソッドです。

grepの書き方

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

以下ではgrepメソッドの引数に正規表現で数字の[0-9]、文字列の[a-z]を指定して、パターンにマッチした要素を取得しています。

# 配列を定義
array = ["1111", "apple", "2222", "orange", "3333", "melon"]

# 数字の0-9
p array.grep(/^[0-9]+$/)

# アルファベットのaからz
p array.grep(/^[a-z]+$/)

実行結果:

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

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

grepメソッドについては以下の記事でも詳しく解説していますので、ぜひ参考にしてください。

matchメソッド

matchメソッドは正規表現にマッチした部分文字列を取得します。

matchメソッドの書き方

オブジェクト名.match(/正規表現/)

以下では”の勉強”が含まれている文字列を取得しています。

str = "Rubyの勉強, Railsの学習"
md = str.match(/.*の勉強/)
p md[0]

str = "Rubyの勉強, Railsの勉強"
md = str.match(/.*の勉強/)
p md[0]

実行結果:

"Rubyの勉強"
"Rubyの勉強, Railsの勉強"

このようにそれぞれ指定した正規表現にマッチした文字列が取得できていることがわかりますね。

matchメソッドについては以下の記事でも詳しく解説しています。

sliceメソッド

sliceメソッドは正規表現のパターンにマッチした部分文字列を取得します。指定したパターンが存在しない場合はnilを返します。

sliceの書き方

オブジェクト名.slice(/正規表現/)

以下ではsliceメソッドを使用して正規表現にマッチした最初の文字列を取り出しています。

# 文字列を定義
str = "1111apple2222orange3333melon"

# aから始まる文字列
p str.slice(/a..../)

# 2から始まる文字列
p str.slice(/2.../)

# 存在しない場合はnil
p str.slice(/c...../)

実行結果:

"apple"
"2222"
nil

sliceメソッドのさまざまな使い方については、以下の記事でも詳しく解説しています。

Rubyについてもっと学びたい方へ

ここでは、Rubyで検索するさまざまな方法について解説していきました。プログラミングを理解するためには、たくさんのトライ・アンド・エラーが必要です。


Rubyの使い方についてもっとよく知りたい
Rubyのスキルを身に着けられるか不安…
Rubyを体系的に理解したい

と感じている方は以下の記事も合わせてご覧ください。Rubyの基礎の基礎から勉強法などを体系的にまとめていますので、きっと参考になるのではと思います。

Rubyを独学で頑張っているけど先が見えない方のために

いや、おれは違うぞ。先のキャリアもしっかり見えてるし、独学の成果も出てきている

そんな方であれば、これから先の話は必要ないでしょう。そっとページの閉じるボタンを押しましょう。

しかし、「先が見えない」と心の底では勘付いているそこの奥さん。この先を読み進めて、一緒に課題を深堀りしていきましょう。

なぜ「先が見えない」という不安や悩みを抱えてしまうのか

さて、「一寸先は闇だ・・・」とお悩みを抱えている方に、なぜ独学でRubyを勉強しているにもかかわらず、そのような現状を抱えてしまうのか、一緒に考えていきましょう。

先が見えない現状を踏まえ、課題として考えられるものは以下のどれかに該当するでしょう。

  • プログラミングの上達が見えない
  • プログラミングを継続できない気がする
  • プログラミングスキルを習得した姿がイメージできない
  • プログラミングスキルを活かした仕事を獲得するイメージができない

これらのどれかに該当することによって、「なんとなくプログラミング学習をしている」という状態になってしまいます。

これらの要因は、三日坊主になる理論と同じなんですが、「プログラミング学習をしなきゃ」とプログラミング学習を頑張ってしまっている状態になってしまっています。

受験勉強をやった経験のある方なら頭がもげるほどに首を縦に振ってしまう方も多いのですが、「今日も5時間勉強するぞ」や「今日はこの章を終わらすぞ」というように、学習を進めることに意識が行き過ぎてしまうと、ある程度学習を継続した後に「先が見えない・・・」となってしまいます。

未来に光を当て、プログラミング学習を「成果が出るもの」にするために

先ほど、「なぜ先が見えないという悩みや不安を抱えてしまうのか」という疑問に対しての答えを示していきました。

これらの課題というのは、独学をしていれば9割の方がぶつかってしまう壁だそうで、いわば、あるあるの現象なのです。

独学をしていて、「なんか前に進めていないぞ」と感じるのはこのせいなんですね。甘く見がちですが、非常にやっかい。

これがさらにやっかいさを極めているのは、上記に挙げた課題のほとんどが、1人で解決できないものばかりだからです。

実は、これらのほとんどが経験者に助けてもらいながら解決しないと、すぐに違う方向へと流れてしまいます。

そう言い切れるのは、以前の私もそうだったからです。

エンジニアやプログラマー関連のキャリアに詳しい方や現役のエンジニアに相談しながら修正を加え、学習を実践して今があります。

そうは言っても、周りにそういう人がいないし・・・

という方もいるでしょう。そういう時にこそ、プログラミングスクールの無料体験レッスンを利用するのです。

営業をかけられて時間の無駄に終わるでしょ?

という考えに辿りついてしまいますよね。結論から言うと弊社では、そういった強引な営業等を行うことはありませんので、安心して受講できます。

「プログラミング学習の先ある未来」を光で明るく照らすには、弊社の無料体験レッスンがぴったりだと断言できます。それくらい無料体験レッスンに自信を持っているのです。

さらに、無料体験レッスンには以下の3大特典もついてきます!

  • 「最短1ヶ月で開発ができる学習方法」電子書籍(非売品)
  • 効率的なオリジナル学習カリキュラム
  • 未経験の転職(フリーランス)を可能にするキャリアサポート

上記の特典だけでも他のスクールにはないポイントだと自信を持っている無料体験レッスン特典です。

ただプログラミング学習をする毎日から、ワクワクしながらプログラミング学習できる毎日に変える体験を一度でいいのでしてみませんか?

無料体験レッスン予約はこちら

まとめ

今回はRubyで検索する方法について、検索の方法を3つのパターン別に解説しました。Rubyで検索するにはさまざまな方法があることがわかったと思います。

実際の業務ではこれらのメソッドを駆使してさまざまな処理を行うことになりますので、使い方についてはしっかりとマスターしておきましょう。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説