- Home ›
- Ruby入門 ›
- Ruby正規表現の使い方
マッチした文字列を取得する($&)
正規表現がマッチした場合、特別な変数「$&」を使ってマッチした文字列を取得することができます。ここでは Ruby の正規表現でマッチした文字列を取得する方法について解説します。
(Last modified: )
マッチした文字列を取得
正規表現オブジェクトを作成し、 =~
メソッドを使って対象の文字列に対してマッチングを行った結果がマッチした場合、 =~
メソッドは文字列の中でマッチした部分のインデックスを返します。この時、対象の文字列の中でマッチした部分文字列が特別な変数 $&
に代入されます。
$&
変数 $&
には正規表現によるマッチが行われるたびにマッチした部分文字列が都度上書きされていきます。なお、正規表現が文字列にマッチしなかった時には変数 $&
には nil
が代入されます。
より具体的な例で確認して見ます。
/year/ =~ "10 years old" print($& + "\n")
上記では正規表現は対象の文字列にマッチしますので、対象文字列の中で正規表現にマッチした部分文字列「year」が変数 $&
に代入されます。
/ .+ / =~ "10 years old" print($& + "\n")
上記では正規表現は対象の文字列にマッチしますので、対象文字列の中で正規表現にマッチした部分文字列「 years 」が変数 $&
に代入されます。
/Year/ =~ "10 years old" p $&
上記では正規表現は対象の文字列にマッチしませんので、変数 $&
には nil
が代入されます。
Regexp.last_matchを使う
Regexp
クラスで用意されているクラスメソッドの last_match
を使ってもマッチした文字列を取得できます。
Regexp.last_match([nth])
変数 $&
と同じくマッチした部分文字列を取得する場合は、引数に 0 を指定して下さい。
/ .+ / =~ "10 years old" print(Regexp.last_match(0) + "\n")
では簡単なプログラムで確認してみます。
# encoding: UTF-8 def check(str) if / .+ / =~ str then puts("○" + str + "(" + $& + ")") else puts("×" + str) end end puts("/ .+ / にマッチするかどうか") check("10 years old") check("What would you like to have?") check("Search results") check("Hello")
下記のように実行して下さい。
-- --
Ruby の正規表現でマッチした文字列を取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。