Search

検索したいワードを入力してください

2019年04月10日

Rubyのmatchメソッドの基本的な使い方を解説

この記事では、matchメソッドの使い方について解説しています。それに付随して、正規表現についても部分的に解説を行っていますので、こちらも参考にしていただければと思います。matchメソッドを使いこなせるようにしっかりと記事内容を理解しましょう。

Rubyのmatchメソッドとは

Rubyのmatchメソッドとは、文字列の一部分を抜き出したり、条件に応じた抜き出しを行うことができるメソッドです。matchメソッドでは、正規表現を用いて条件を指定します。

正規表現とは、さまざまなプログラミングにおいて、文字列を検索する場合によく使われる表現方法です。少し難しいですが、慣れるととても便利なものなのでこちらもしっかり理解することをおすすめします。

正規表現に関しては以下のリンクを参考にしてください。

matchメソッドの基本

Rubyのmatchメソッドは、「文字列.match(/正規表現/)」と記述して利用します。matchメソッドの引数にある/はデリミタといい、正規表現を利用する場合は、それをデリミタで挟む必要があります。なお、デリミタは/でなくても、 英数字、バックスラッシュ、空白文字以外の任意の文字であれば大丈夫です。

それでは、以下の項目で具体的なmatchメソッドの使い方を見ていきましょう。

一致した文字列を取得する

まずは基本的な、一致した部分の取得について解説します。
Rubyである文字列との一致を表す場合、matchメソッドでは「文字列.match(/検索文字列/)」と表します。検索文字列に一致する箇所がある場合は、その一致部分を返し、ない場合は空文字列を返します。

以下にサンプルコードを示します。

sample = 'abcdefghi'
puts sample.match(/cde/) //cde
puts sample.match(/x/) //

matchメソッドの引数に渡した文字列が対象文字列に存在する場合は、その引数の文字列が返され、引数の文字列が存在しない場合は空配列が返されます。

なお、この書き方による検索では「cde」がひとまとまりで検索されるため、いずれかの文字列が存在しても一致したとはみなされず空配列が返ります。

sample = 'abcdfghi'
puts sample.match(/cde/) //

文字列の存在をmatchメソッドで確認する

次に、Rubyで文字列の存在を確認する場合のについて解説します。先程の項では、ある文字列が対象文字列内に存在するかを確認しましたが、今度は任意の文字列についてその存在を確認する方法です。この場合には、「文字列.match(/.*/)と指定します。

matchメソッドの引数にある.(ピリオド)は、正規表現で「任意の一文字」を表します。そして、*は正規表現で「直前の文字の0回以上の繰り返し」を表します。

つまり.*で、「任意の一文字の0回以上の繰り返し」を表現することになり、全ての文字列を対象とすることができるわけです。

これらを用いることで、文字列が存在するかどうか(空文字列かどうか)を確認することができます。

以下にサンプルコードを示します。
sample = 'abcdefghi'
sample2 = 'jklmn'
sample3 = ''
puts sample.match(/.*/) //abcdefghi
puts sample2.match(/.*/) //jklmn
puts sample3.match(/.*/)


文字列が存在するときはその文字列が全て返されます。空文字列の場合は空文字列が返ることがわかります。

部分一致した文字列を取得する方法

次にRubyで部分一致した文字列を取得する方法について解説します。部分一致での検索の場合は、先程の項で紹介した「.*」を利用します。各一致部分によって以下のように使い分けがされます。
・前方一致:「検索文字列.*」
・後方一致:「.*検索文字列」
・部分一致:「.*検索文字列.*」

以下にサンプルコードを示します。

sample = 'abcdefghi'
puts sample.match(/cde.*/) //cdefghi
match(/.*cde/) //abcde
puts sample.match(/.*cde.*/) //abcdefghi


/cde.*/と指定した場合は、「cde」より後ろの文字列も一緒に取得されています。/.*cde/と指定した場合は、「cde」より前の文字列も一緒に取得されています。/.*cde.*/と指定した場合は、全ての文字列が取得されています。

このように、正規表現を用いると部分一致の文字列を取得することができます。

文字列から数字のみを取得する方法

次に、Rubyで文字列から数字のみを取得する方法です。ここでは、任意の数字を取得する方法を紹介します。「検索文字列.match(/\d+/)」と指定します。

matchメソッドの引数にある\dとは、正規表現で「0〜9のうち1文字」を表します。ちなみに、[0-9]としても同様の意味になります。
また、matchメソッドの引数にある+は、正規表現で「直前の文字の1回以上の繰り返し」となります。

つまり、\d+は、「0~9のいずれかの1回以上の繰り返し」を意味することになり、数字を表すことができます。

以下にサンプルコードを示します。

sample = 'abc123ghi'
puts sample.match(/\d+/) //123
puts sample.match(/[0-9]+/) //123


このように数字部分だけを取得することができます。

なお、数字部分が2箇所になる場合、この記法だと一番左にくる数字部分しか取得することができません。気をつけましょう。
sample = 'abc123ghi456'
puts sample.match(/\d+/) //123
puts sample.match(/\[0-9]+/) //123

一致した文字列の前後の値を取り出す

次に、Rubyで一致した文字列の前後の値を取り出す方法について解説します。Rubyのプログラミングにおいて、ある文字の直前や直後の文字列だけ取得したい場面はよくでてきます。こういった場合でも正規表現とRubyのメソッドを使うことで簡単に実現することができます。

今回は、
・pre_match
・post_match
を使った方法を紹介します。これらはmatchメソッドと組み合わせることで利用します。

pre_matchの使い方

matchメソッドを利用してマッチした文字列の前方の文字列を取得する場合、pre_matchを利用します。文字列.match(/正規表現/).pre_matchと指定します。

以下にサンプルコードを示します。

sample = 'abc123ghi'
puts sample.match(/\d+/).pre_match //abc


このように、数字列の直前の文字列が取得できていることがわかります。

post_matchの使い方

matchメソッドを利用してマッチした文字列の後方の文字列を取得する場合、post_matchを利用します。文字列.match(/正規表現/).post_matchと指定します。

以下にサンプルコードを示します。

sample = 'abc123ghi'
puts sample.match(/\d+/).post_match //ghi


このように、数字列の直後の文字列が取得できていることがわかります。

matchメソッドのまとめ

今回は、matchメソッドの使い方について解説しました。正規表現で指定する部分に関してはそれぞれの表現の意味も一緒に解説していますので、ぜひ参考にしてください。

正規表現はRubyプログラミングをする上では欠かせないものです。自分の目的にあった表現を記述するのは難しいと思いますが、正規表現の1つ1つの意味や使い方をしっかりと理解していくことが重要です。

正規表現が思い通りに使えるようになると、どんな文字列でも検索することができるようになり、プログラマとしての対応できる幅が大きく広がります

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related