読者です 読者をやめる 読者になる 読者になる

Bonkura - Kenny

SIerで働く文系SEの記録

【たのしいRuby_16】正規表現クラス

Ruby

たのしいRubyの第16章を学んだ。

たのしいRuby 第4版

たのしいRuby 第4版

正規表現で書かれたパターンを保持するオブジェクトを正規表現オブジェクト」 と呼ぶ。

正規表現の作り方

  • //で囲む
  • re = Regexp.new("Ruby")
  • %r(パターン)

正規表現メソッド「=~」

  • マッチしない場合: nil
  • マッチした場合: マッチする文字列が始まる文字の位置

オプション

「/.../」という書式の後ろに続けて 「/.../im」 というように指定する。

  • i:大文字と小文字の違いを無視
  • m:複数行マッチ

キャプチャ

正規表現でマッチした部分の一部を取り出す。

/(.)(.)(.)/ =~ "ABC"

a = $1
b = $2
c = $3

特殊な変数

  • (?:):キャプチャする必要ない場合
  • 「$`」:マッチした文字列より前の文字列
  • 「$&」:マッチした文字列
  • 「$'」:マッチした文字列より後の文字列

メソッド

文字列の置き換えメソッド。ブロックを取る事も出来る。subは最初にマッチしたところのみ。gsubは全部。 ブロックを渡すと、マッチした部分がブロックに渡り処理された文字列が元のマッチした部分と置き換わる。

str.gsub(/+s/,' ')

マッチした文字列を取り出す。置き換えはしない。scanメソッドは、引数で指定した正規表現のパターンとマッチする部分を文字列からすべて取り出し、配列にして返しす。マッチする部分がなければ、空の配列を返します。

"abcdafhtajklalsljla".scan(/.a/) do |match|
p match.upcase
end