Stringクラスのmatchメソッドは、文字列マッチのためのメソッドです。正規表現を使って調べたいパターンを指定することができます。
matchメソッドの使い方
1 |
match(パターン) |
正規表現パターンに当てはまる文字列があったときは、MatchDataオブジェクトを、当てはまる文字列がなかったときは、nilを返します。
MatchDataオブジェクトは、マッチした文字列やその前後の文字列など、マッチに関するいろいろな情報が格納されているオブジェクトです。
文字列「Item: Ringo, Orange」>>>をレシーバに、正規表現/Item: (\w+), (\w+)/を指定すると以下のようになります。
1 2 |
md = "<<<Item: Ringo, Orange>>>".match(/Item: (\w+), (\w+)/) # => #<MatchData "Item: Ringo, Orange" 1:"Ringo" 2:"Orange"> |
下記のようにマッチしない場合はnilが返ります。
1 2 |
md = "<<<Item: Ringo, Orange>>>".match(/Fruits/) # => nil |
MatchDataオブジェクトから情報を取り出す
また、次のように指定すると、MatchDataオブジェクトから必要な情報を取り出せます。
正規表現にマッチした文字列を得る
1 2 |
md[0] # => "Item: Ringo, Orange" $& # => "Item: Ringo, Orange" |
()にキャプチャした文字列を得る
1 2 3 4 |
md[1] # => "Ringo" md[2] # => "Orange" $1 # => "Ringo" $2 # => "Orange" |
()にキャプチャした文字列すべてを得る
1 |
md.captures # => ["Ringo", "Orange"] |
最後の()にマッチした文字列を得る
1 2 |
md[-1] # => "Orange" $+ #=> "Orange" |
正規表現にマッチした文字列の前の文字列を得る
1 |
md.pre_match # => "<<<" |
正規表現にマッチした文字列の後ろの文字列を得る
1 |
md.post_match # => ">>>" |
「()の数+1」を得る
1 |
md.size # => 3 |
このようにとても簡単に正規表現を操り、文字列から必要な情報を取り出すことができます。