Rubyには文字列を検索するさまざまな方法が用意されていますが、
Rubyで開発を行う際に、
「正規表現で一致した文字列を取得したい」
「一致した文字列の前後の文字列を取得したい」
のような問題に直面することがあります。
そんなときはmatchメソッドを使用すると便利です。
ここではmatchメソッドについて、
【基礎】一致した文字列を取得する方法
【基礎】部分一致した文字列を取得する方法
【基礎】数値のみ取得する方法
【発展】一致した前後の文字列を取得する方法
などについてわかりやすく解説していきます。
matchメソッドは文字列を正規表現で検索するときに非常に便利ですので、この機会に覚えておきましょう!
matchメソッドとは
matchメソッドは引数に正規表現を指定して、マッチした文字列を取得したいときに使用します。
matchオブジェクトは以下のように記述します。
オブジェクト名.match(/正規表現/)
正規表現は「//」でくくった中に記述します。
正規表現とは特殊文字を用いて文字列を表現するための手段で、プログラミングにおいて文字列を検索するときによく使われます。
たとえば、「samurai engineer」の文字列から「engineer」の部分のみ取得したい場合は正規表現として「/.*engineer/」と表現することで取得することができます。
matchメソッドは正規表現のパターンにマッチした場合は配列を返し、一致しなかった場合はnillを返します。
matchメソッドの基本
一致した文字列を取得する
ここではmatchメソッドの基本的な使い方を見ていきましょう。
文字列の中から、一致した文字列を取得するには以下のように記述します。
サンプルプログラム:
str = "appleorangemelon" md = str.match(/orange/) puts md[0]
実行結果:
orange
このサンプルでは「//」で文字列「orange」が存在するかmatchメソッドで確認を行い、一致した場合はその文字列を取得しています。
オブジェクトstrには文字列「orange」が存在するため、mdには一致した文字列が格納されます。
部分一致した文字列を取得する
部分的に文字列を検索したい場合は「*」を使用します。
「*」は検索文字列の前または後ろに「*検索文字列」のようにつけることで、検索文字列を含む文字列を取得することができます。
サンプルプログラム:
string = "Hello Ruby!! Hello Rails!!" md = string.match(/.*Ruby!!/) puts md[0]
実行結果:
Hello Ruby!!
このように「*Ruby!!」と指定することで検索文字列を含む前の文字列も取得することができました!
文字列から数字のみを取得する
文字列から数字のみを取得したい場合は、「/\d+/」のように指定します。
/\d+/という正規表現は、数字が1個以上並んでいる場合の文字列にマッチします。
サンプルプログラム:
str = "AAA-012-BBB".match(/\d+/) p str[0] str = "ABC-DEF-345".match(/\d+/) p str[0] str = "678-ABC".match(/\d+/) p str[0]
実行結果:
"012" "345" "678"
このように数字のみを取得することができましたね!
一致した文字列の前後の値を取り出す
pre_matchでマッチした前の部分を取り出す
pre_matchメソッドを使用すると、マッチした文字列のより前の文字列を取得することができます。
サンプルプログラム:
str = "Rubyの勉強 および Raisの勉強をはじめましょう" reg = /および/.match(str) p reg.pre_match
実行結果:
"Rubyの勉強 "
マッチした文字列、「および」より前の部分が取り出されました!
post_matchマッチした後ろの部分を取り出す
post_matchメソッドを使用すると、マッチした文字列のより後ろの文字列を取得することができます。
サンプルプログラム:
str = "Rubyの勉強 および Raisの勉強をはじめましょう" reg = /および/.match(str) p reg.post_match
実行結果:
" Raisの勉強をはじめましょう"
マッチした文字列、「および」より後ろの部分が取り出されました!
まとめ
ここでは、文字列を検索するmatchメソッドについて、
- matchメソッドとは
- 一致した文字列を取得する方法
- 部分一致した文字列を取得する方法
- 数値のみ取得する方法
- 一致した前後の文字列を取得する方法
などについて解説しました。
matchメソッドを使用すれば正規表現を使用して文字列を簡単に取得することができますので、使い方はしっかりと理解しておきましょう。
もしmatchメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!