Just do IT

思うは招く

Rubyの正規表現 超基本

正規表現は「パターン発見くん」

正規表現」という表現がもはやとっつきにくそうなオーラを出しているが、ようは文字列とマッチングをする「パターン」の書き方のこと。最初はわかりにくいので「パターン発見くん」みたいな感じでとらえるといい。

たとえば、

  • 文字列からRで始まる文字を見つけたい
  • 文字列からRで始まってyで終わる、4文字の文字列を見つけたい
  • 文字列から数字だけを見つけたい
  • 文字列をsplitメソッドで「空白、タブ、改行で文字列を区切って配列に入れたい」

などなど、「文字列の中からこんな文字を見つけ出したい」てなときに使える便利なもの。Rubyに限らず他のプログラミング言語でも使える。

英語ではRegular Expressionと呼ぶ。これもわかりにくいな…

正規表現を使う

Ruby正規表現を使うには、大きくわけて2種類ある。

//の中に書く

正規表現を使うには、作ったパターンを「//」の中に書く。

/パターン/

たとえば、splitメソッドで「空白、タブ、改行で文字列を区切って配列に入れたい」場合はこう書ける。

str = "blue 青 white 白\nred 赤"
str.split(/\s+/)
=> ["blue", "", "white", "", "red", ""]

/\s+/にあたるのが正規表現となる。

正規表現クラスのメソッドを使う

もしくは、正規表現クラスRegexpのメソッドを使い、正規表現オブジェクトを作る方法もある。

re = Regexp.new("Python")
=> /Python/

/Python/という正規表現オブジェクトが作られた。 これがどんなふうに使えるのか。

re = Regexp.new("Python")
if re =~ "Python"
  p "matched"
end
=> "matched"

正規表現 =~ 文字列で、マッチするかどうか調べることができる。なお、正規表現と文字列の位置が反対でも動作する。

正規表現について学ぶには以下の記事シリーズが最強。とてもわかりやすく正規表現を学べる。 qiita.com