8

Domain.CCTLD に一致する正規表現を知っている人はいますか? サブドメインは必要なく、「アトミック ドメイン」のみが必要です。たとえば、docs.google.com一致しませんが一致google.comします。ただし、これは.co.ukCCTLD のようなものでは複雑になります。誰かが解決策を知っていますか? 前もって感謝します。

編集:のような複数のサブドメインも処理する必要があることに気付きましたjohn.doe.google.co.uk。今まで以上に解決策が必要です:P.

4

3 に答える 3

8

Public Suffix Listプロジェクトを通じて入手できる情報を探しているようですね。

「パブリック サフィックス」は、インターネット ユーザーが直接名前を登録できるサフィックスです。パブリック サフィックスの例としては、「.com」、「.co.uk」、「pvt.k12.wy.us」などがあります。パブリック サフィックス リストは、既知のすべてのパブリック サフィックスのリストです。

パブリック サフィックスのリストと合理的に一致する単一の正規表現はありません。パブリック サフィックス リストを使用するコードを実装するか、既に使用している既存のライブラリを見つける必要があります。

于 2010-07-07T22:23:45.553 に答える
3

上記のコメントに基づいて、質問を再解釈します-それらに一致する正規表現を作成するのではなく、それらに一致する関数を作成し、その関数を適用してドメイン名のリストをフィルタリングしますgoogle.com、amazon.co.uk などのファースト クラス ドメインを含めます。

まず、TLD のリストが必要です。Greg が述べたように、public suffix リストは出発点として最適です。リストを と呼ばれる python 配列に解析したと仮定しましょうsuffixes。これが気に入らない場合は、コメントしてください。それを行うコードを追加できます。

suffixes = parse_suffix_list("suffix_list.txt")

ここで、特定のドメイン名がパターン some-name.suffix に一致するかどうかを識別するコードが必要になります。

def is_domain(d):
    for suffix in suffixes:
        if d.endswith(suffix):
            # Get the base domain name without suffix
            base_name = d[0:-(suffix.length + 1)]
            # If it contains '.', it's a subdomain. 
            if not base_name.contains('.'):
                return true
    # If we get here, no matches were found
    return false
于 2010-07-08T21:41:39.417 に答える
2

TLD の完全なリストを取得し、それを使用して正規表現を作成することで、おそらくこれを解決できます。例 (Ruby の場合、申し訳ありませんが、まだ Pythonista ではありません):

tld_alternation = ['\.com','\.co\.uk','\.eu','\.org',...].join('|')
regex = /^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(#{tld_alternation})$/i

TLD の実際のリストを知らずに、実際の 2 部構成の TLD とサブドメインを適切に区別することはできないと思います (つまり、正規表現がどのように機能するかを知っていれば、いつでも TLD のように見えるサブドメインを構築できます)。

于 2010-07-07T22:32:23.363 に答える