k01ken’s b10g

He110 W0r1d!

Rubyのif文とcase文で正規表現を用いたときの違い

開発環境はWindows7 Professional(32bit) + ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]。

case文を用いていたら、思ったように動作しなかったのでメモしておく。

# -*- coding: utf-8 -*-

url = "http://k01ken.hatenablog.com/"

case url
    when /^http:\/\/k01ken\.hatenablog\.com/.match(url)
        p true
    else
        p false
end

if /^http:\/\/k01ken\.hatenablog\.com/.match(url)
  p true
else
 p false
end

実行結果
f:id:k01ken:20180909110224p:plain

1つ目はfalseになり、2つ目はtrueになる。
case文ではどうやら、対象となる数値や文字列が完全に一致しないと一致したことにはならないみたいだ。

参考リンク
正規表現 (Ruby 2.5.0)
Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい
case文の条件で正規表現を使って内部でマッチ部分を使いたいとき
Ruby の case 文
instance method Regexp#match (Ruby 2.5.0)