0

ホスト名のトップレベルドメインの正確な表現を抽出することは、各トップレベルドメインレジストリがドメインの発行方法と定義されるサブドメインに関する独自のポリシーを自由に作成できるという事実によって複雑になります。これらを調整したり、標準を確立したりする標準化団体はないように思われるため、実際のTLDの決定はやや複雑な問題になっています。

Webブラウザは登録されたドメインにのみCookieを割り当て、セキュリティ上の理由から、Cookieをより広いレベルで割り当てることができないように注意する必要があるため、これらのブラウザには通常、何らかの形式ですべての既知のTLDのデータベースが含まれています。Firefoxにはかなり完全なデータベースがあることがわかりました。

http://hg.mozilla.org/mozilla-central/raw-file/3f91606bd115/netwerk/dns/effective_tld_names.dat

私は2つの特定の質問があります:

  • このリストを正規表現に変換するのはかなり簡単ですが、独自のリストを作成するよりも優れた解決策であるgemまたは参照正規表現はありますか?tld gemは、ルートレベルドメインの国レベルの情報のみを提供します。

  • Firefox TLDリストよりも優れたリファレンスはありますか?すべてのローカルGoogleサイトはこの仕様によって正しく解析されますが、これは完全なテストではありません。

そこに何もない場合、この種の操作を実行する宝石に興味がある人はいますか?この種のものはURIモジュールに存在するはずですが、明らかに欠落しています。

このファイルをRubyで使用可能な正規表現に変換する方法は次のとおりです。

TLD_SPEC = Regexp.new(
  '[^\.]+\.(' + %q[
// ***** BEGIN LICENSE BLOCK *****
// ... (Rest of file)
  ].split(/\n/).collect do |line|
    line.sub(%r[//.*], '').sub(/\s+$/, '')
  end.reject(&:blank?).collect do |s|
    Regexp.escape(s).sub(/^\\\*\\\./, '[^\.]+\.')
  end.join('|') + ')$'
)
4

3 に答える 3

4

Addressableを使用して、必要なものがあるかどうかを確認することをお勧めします。Ruby のデフォルトの URI ライブラリよりも多くの機能があります。特に、そのテンプレート機能が役立つ場合があります。

ドキュメントから:

Addressable は、Ruby の標準ライブラリの一部である URI 実装を置き換えるものです。関連する RFC により厳密に準拠し、IRI と URI テンプレートのサポートを追加します。さらに、URI テンプレートの広範なサポートを提供します。

新しい TLD が最近オープンしたことで、しばらくは悪夢になるでしょう。右側の関連リストをチェックして、解決策を見つけようとしている人の数を確認してください。Domain.CCTLDに一致する正規表現は、関数を使用してそれをより小さなステップに分割することを推奨しており、私が行うことです。正規表現でこれを行おうとすると、すべてを 1 つの式で実行できると想定されます。これは、正規表現を使用して XML や HTML を解析するような匂いがし始めます。単一のパターンに対して、または少なくとも単一の保守可能なパターンに対して、ターゲットが揺れすぎています。

その答えは公開TLDリストに言及しています。Regexp.escapeそこにある情報を使用すると、Rubyとメソッドをすばやく使用Regexp.unionして、適切な正規表現をその場で構築できます。Perl の Regexp::Assemble モジュールを利用できるとよいのですが、そうしなければならないわけではありませunionん。(これを回避する方法については、「Ruby で何百ものテキスト置換を実行する効率的な方法はありますか? 」を参照してください。)

于 2011-07-12T19:47:30.090 に答える
1

http://guava-libraries.googlecode.com/svn-history/r42/trunk/src/com/google/common/net/TldPatterns.javaに別のフラットファイル データベースがあります。

おそらく、2 つを組み合わせて、OData.org、github、sourceforge などの場所にアップロードできます。

于 2011-02-17T07:56:57.747 に答える
0

Mozilla リストのより正式なバージョンへのアクセスを提供するpublic-suffix-listと呼ばれる gem があります。

于 2011-07-12T16:54:42.740 に答える