2008年3月20日木曜日

[Prx] Googleが持つほとんどのURLにマッチさせる方法

現実的な路線は、以下のようになると思います。

([^/]++.|)google.co(m|.jp)
[^.]+.google.co(m|.jp)

どうして上のような表現になるのか?
これを読み解くにはドメインについて理解を深める必要があります。

Googleが持っているサブドメイン

以下のURLを例にとってみましょう。

http://www.google.com/

このURL中の www.google.com (以下、この部分をホスト名と呼びます) は3つのドメインに分割することができます。

第1レベルドメイン (トップレベルドメイン)
  .com
第2レベルドメイン (セカンドレベルドメイン)
  .google
第3レベルドメイン (サードレベルドメイン)
  www.

ホスト名は第2レベルドメイン以上を持ってアドレスが与えられます。
だから、もし誰かがドメインを取得しようとしたら、少なくとも第2レベルドメインまでの名前を持ったURLを得ることになります。

Googleは google.com のドメインを持っており、第3レベルドメイン以降のドメインはサブドメインと呼ばれるものです。(www. はサブドメイン)
サブドメインはGoogleが自由に作ることができるので、Googleはサブドメインを作ることでいくらでもURLを増やせます。

http://mail.google.com/
http://groups.google.com/
http://maps.google.com/

これらにマッチさせる表現は、([^/]++.|)google.com[^.]+.google.com となるでしょう。
前者はサブドメインがないURL (google.com) にマッチしますが、後者はマッチしません。

Googleが持っているトップレベルドメイン

http://www.google.com/http://www.google.co.jp/ はURLこそ違いますが、ページに表示される内容は同じです。
よくみると、.com と .co.jp が違うことがわかりますね。

.jp は日本を表すドメイン名です。
Googleは世界中にサーバを設置しているため、google.us (アメリカ)、google.fr (フランス)など様々な国のドメインを持っています。
第1レベルドメインはトップレベルドメイン一覧にあるように、非常にたくさんの数があります。
Proxomitronで第1レベルドメイン全てを網羅しようとするなら、パフォーマンスの観点からリストを使うことになりますが、そこまでしなくても自分が利用している第1レベルドメインだけ網羅すれば十分かもしれません。

まとめ

google.com と google.co.jp のサブドメインを含むURLにマッチする表現は

([^/]++.|)google.co(m|.jp)
[^.]+.google.co(m|.jp)

となります。
前者はサブドメインがないURL (google.com) にマッチしますが、後者はマッチしません。

これでほとんどのURLに対応できると思いますが、Googleは500個以上のドメインを持っているそうなので、全ドメインに対応するのはまず無理でしょう。
サブドメインとトップレベルドメインの仕組みを理解した上で、必要なドメインを取捨選択するのが妥当だと思います。

ラベル: ,