【初心者必見】Ruby文字列検索、メソッド使い方まとめ!

【初心者必見】Ruby文字列検索、メソッド使い方まとめ!
貝原 輝昌
書いた人 貝原 輝昌

こんにちは!Webコーダー・プログラマーの貝原(@touhicomu)です。

今日は、Rubyの文字列の検索について、書きたいと思います。

Rubyをプログラミングしていると、「文字列の中の文字を検索したい!」と思う場面によく出会いますよね。

特にRubyは文字列処理が得意分野の一つですし、文字列の検索は押さえておきたいテクニックです。

そうなると、「どんな文字列検索のメソッドがあるのか知りたい!」と思うものです。

さらに、Rubyの文字列の扱いに慣れるつれ、「文字列検索のメソッドの使い分けを知りたい!」と思うようになるのもうなづけます。

そこで!今回は、Rubyの文字列の検索メソッドのすべてについてまとめてみました。

indexメソッドによる文字列の検索

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

indexメソッドは、検索文字がレシーバの文字列の中で何文字目の位置に出てくるか検索し、その何文字目かを返します。文字が見つからなければnilを返します。

なお、indexメソッドは、レシーバの文字列の左端の文字から右側に向かって検索を開始します。

また、何文字目かという順番ですが、これはRubyの配列の添え字と同じく、0文字目から始まりますので注意が必要です。

例えば、”abcdef”というレシーバがあり、”bc”という文字を検索した場合、結果は「1文字目」であり、値「1」の数値が戻値となります。

サンプルコード:

サンプルコードの実行結果:

以上のように、文字列”abcdef”をレシーバにしてindexメソッドを実行することによって、indexメソッドの引数に指定した文字列を”abcdef”の中から検索し、検索文字が何文字目の位置に出てくるかを戻値として受け取りました。
検索文字が見つからない場合は、nilが戻値として返ってくることも確認できましたね。

rindexメソッドによる文字列の検索

rindexメソッドも、文字列の中に指定の文字列が含まれているか確かめるメソッドです。

ただし、rindexメソッドは、indexメソッドの逆で、レシーバの文字列の末尾、つまり右側端の文字から左側に向かって検索を開始します。
(rindexは、Reverse(逆) Index の略語です。)

rindexメソッドは、検索文字がレシーバの文字列の中で左から何文字目の位置に出てくるか検索し、その何文字目かを返します。文字が見つからなければnilを返します。

改めて注意が必要なのは、rindexメソッドは、レシーバの文字列の右側から検索を行いますが、戻値は左から何文字目の位置かを返す点です。
右側から何文字目かではないので、注意してください。

また、何文字目かという順番ですが、これもindexと同じく0文字目から始まりますので注意が必要です。

例えば、”abcdef”というレシーバがあり、”bc”という文字を検索した場合、結果は「1文字目」であり、値「1」の数値が戻値となります。

サンプルコード:

サンプルコードの実行結果:

以上のように、文字列”abcdef”をレシーバにしてrindexメソッドを実行することによって、rindexメソッドの引数に指定した文字列を”abcdef”の中から検索し、検索文字が左から何文字目の位置に出てくるかを戻値として受け取りました。
検索文字が見つからない場合は、nilが戻値として返ってくることも確認できましたね。

include?メソッドによる文字列の検索

indexメソッドやrindexメソッドは、レシーバの文字列を検索し、何文字目の位置に検索文字列が見つかったか数値の値を返していました。

しかし、一般的には、「レシーバの文字列に検索文字が存在するかどうか?」のチェックだけで済む処理も多いです。

そこで、Rubyでは、そのような簡略的な使用法を行うメソッドとして、include?メソッドを用意しています。

include?メソッドは、文字列を検索するメソッドです。

レシーバの文字列に対し、include?メソッドを検索文字列を引数に指定して実行すると、検索文字列がレシーバに見つかった場合はtrueを返し、見つからない場合は、falseを返します。

これだけの機能でも、十分活躍の場面はありますので、ぜひ、この機会に覚えておいてください。

サンプルコード:

サンプルコードの実行結果:

以上のように、include?メソッドは、引数の検索文字列がレシーバの文字列内に見つかればtrue、見つからなければfalseを返します。

matchメソッドによる文字列の検索

Rubyの文字列の検索メソッドの最後は、matchメソッドです。

matchメソッドは引数の「正規表現」を使って「パターンマッチ」を行う重要なメソッドです。

正規表現パターンマッチの概念については、少し高度な内容になるため、ここでは簡単に紹介するだけにしておきます。

読者の皆さんも、機会があられましたら、ぜひ、「正規表現」と「パターンマッチ」について勉強されてくださいね。Rubyの中でも大変重宝されるテクニックです。

ここでは、1個以上の数字とマッチする正規表現/\d+/を例にmatch関数の動きを解説します。
(正規表現は文字列のように記述しますが、文字列オブジェクトとは違うため、”” ではなく // でくくります

レシーバの文字列が、”SUB-0123-A”というような文字列だったとします。このような文字列は、商品コードなどによく登場しますね。

ここで正規表現/\d+/をmatchの引数に渡して実行すると、パターン「0123」にマッチし、matchメソッドは、マッチしたパターンのMatchDataオブジェクトを返します。

ここでは、MatchDataオブジェクトの添え字0番目のオブジェクトが”0123”となります。

このように、レシーバの文字列の中から、特定のパターンにマッチする文字列を抽出するのが、正規表現の主な役割です。

なお、\d は、数字1文字にマッチする正規表現で、+ は+の直前の文字(ここでは\d、つまり数字)が1個以上並んでいる文字列にマッチする正規表現です。
そのため、/\d+/という正規表現は、数字が1個以上並んでいる文字列にマッチします。

サンプルコード:

サンプルコードの実行結果:

以上のように、matchメソッドでパターンマッチを行うことにより、目的の「1個以上の数字の文字列」を抽出できていますね。

まとめ

いかがでしたでしょうか。

Rubyの文字列の検索には、いろいろなメソッドがありましたね。

それぞれ用途も使用場面も異なります。

一度に覚えるのは大変ですが、おおまかにこんなメソッドがあるものと覚えておいて、使う場面になった際に復習されるのが良いと思います。

また、ここでは詳細には解説していませんが、Rubyの文字列の操作では、正規表現も必須になってきますので、合わせて確認しておきましょう。

文字列の検索の使い方を忘れたら、またこの記事を読み返してみてください。

Rubyの文字列をしっかり理解したい方に

この記事は文字列を体系的に解説した3ステップで簡単! Rubyの文字列を 完全理解の一部となります。
文字列をさらに理解したい方はこちらを読んでどんどん理解を深めていくようにしましょう。

Rubyカリキュラム無料公開中!
この記事はRuby入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Ruby学習に必要な情報を一つにまとめていますので効率よくRubyを学ぶことが出来ます。この機会に是非活用していただければと思います。


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


Rubyを最短で習得したい方へ
近年では様々なWEBサービスが流通するようになりました。

WEBサービスの普及が進むにつれて、それらを素早く開発するのに長けたRubyの人気は今後さらに増し、Rubyエンジニアの需要も自ずと増えることは間違いなしでしょう。

元々ITリテラシーの高い方や他言語を習得している方であれば、独学でRubyを習得することが可能です。

ただし、プログラミング学習をしている方の多くは

「自分に合った教材が見つけられずに挫折してしまった」
「勉強のための勉強になってしまい、ゴールが見えない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決するのに何日もかかってしまう」
このような悩みを抱えたまま挫折してしまうのが現実となっています。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
  • WEBアプリケーション開発までしっかりサポートして欲しい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、初心者の方がつまづきがちな、「CookPad」、「Wantedly」、「食べログ」のようなWEBアプリケーション開発方法もスムーズに学習することできます。

実際にオリジナルWEBアプリを開発し、成果物として認められて仕事獲得に成功した塾生は数多くいます。

このように、オリジナルアプリ開発から仕事獲得まで徹底的にサポートすることでプログラミング初心者の方でも安心して基礎学習に取り組むことができます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

Rubyならではの学習方法や、現役フリーランスRubyエンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像から弊社サービス内容をご確認ください。

ruby_a1

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題、最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
 1記事最大11,000円!テックライター募集


LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

貝原 輝昌

貝原 輝昌

こんにちは!貝原(@touhicomu)と申します。
現在は、Web業界のフリーランスとして、主にPHP/WordPress/BuddyPress/VPSサーバー構築などの業務を受注しています。
現住所は、日本の西海岸、長崎県は波佐見町です。田舎ライフです。^^
地元の観光団体「笑楽井石」にボランティアでほたる撮影会やそば塾などのスタッフとして参加させて頂いています。
以下の活動も行っています。
 ・笑楽井石のブログ
 ・エクセル関数を日本語化するソフト
 ・エクセルVBAを日本語で記述するソフト