Rubyの正規表現において、URLでマッチさせる

以下のようなURLがあって、

1
 url = http://google.com/foo/bar.html

それに対して、以下のURLでマッチさせたい時、 べた書きの正規表現であれば、エスケープを使って書くことができるが、

1
2
3
4
5
6
7
 #マッチさせたいURL
  http://google.com/
  #べた書き正規表現
  url.match(/http:\/\/google\.com\//)

  #このように書くことができる
  Regexp.new(Regexp.quote('http://google.com/'))

公式ドキュメントによれば、

正規表現において特別な意味を持つ文字の直前にエスケープ文字(バックスラッシュ)を挿入した文字列を返します。

とのことなので、引き渡した文字列を自動的にエスケープしてくれるようだ。

これを使うと、変数に入ったURLを正規表現のマッチャーとして使うときに、非常に便利になる。具体的には、

1
2
3
4
5
6
 urls = ["http://yahoo.com/", "http://google.com/"]
  urls.each do |url|
      if long_url.match(Regexp.new(Regexp.quote(url)))
          do_something
      end
  end

のようにリストを渡して、沢山処理する必要があるときに使うと、 とても便利に使うことができる。

参考文献

Comments