Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

正規表現のマッチ情報はlast_matchメソッドを使うようにする

正規表現のパターン一致を引っ張り出す時、どうしてますか?
私は$1を使う軟弱ものです。

/(as).*(you).*(like)/.match('as you like')
#=> #<MatchData "as you like" 1:"as" 2:"you" 3:"like">

> $1
#=> "as"
> $2
#=> "you"
> $3
#=> "like"
> $4
#=> nil

毎度お馴染みコーディング規則からすると、
上のようなパターンは古くさいので推奨されてないそうです。
...では、どうするのか?
last_matchメソッドを使います。

> Regexp.last_match
#=> #<MatchData "as you like" 1:"as" 2:"you" 3:"like">
> Regexp.last_match[0]
#=> "as you like"
> Regexp.last_match[1]
#=> "as"
> Regexp.last_match[2]
#=> "you"
> Regexp.last_match[3]
#=> "like"