Regex для соответствия Домену. CCTLD

Делает любой знает, что регулярное выражение соответствует Домену. CCTLD? Я не хочу субдомены, только "атомарный домен". Например, docs.google.com не становится подобранным, но google.com делает. Однако это сложно с материалом как .co.uk, CCTLDs. Кто-либо знает решение?Заранее спасибо.

Править: Я понял, что также должен иметь дело с несколькими субдоменами, как john.doe.google.co.uk. Нужно решение теперь более чем когда-либо :P.

8
задан Tom 8 July 2010 в 00:34
поделиться

3 ответа

На основе вашего комментария выше я собираюсь переосмыслить вопрос - вместо того, чтобы создавать регулярное выражение, которое будет соответствовать им, мы создадим функцию, которая будет соответствовать им, и примените эту функцию, чтобы отфильтровать список доменных имен, чтобы включить только домены первого класса, например google.com, amazon.co.uk.

Во-первых, нам понадобится список TLD. Как сказал Грег, список публичных суффиксов - отличное место для начала. Предположим, вы преобразовали список в массив Python, называемый суффиксами . Если вам это не нравится, прокомментируйте, и я могу добавить код, который это сделает.

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
3
ответ дан 5 December 2019 в 12:54
поделиться

Я бы, вероятно, решил эту проблему, получив полный список 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 и субдомен, не зная фактического списка TLD (то есть: вы всегда можете составить субдомен, который выглядит как TLD, если вы знали, как работает регулярное выражение.)

2
ответ дан 5 December 2019 в 12:54
поделиться

Похоже, что вы ищете информацию, доступную через проект Public Suffix List.

Публичный суффикс - это суффикс, под которым пользователи Интернета могут напрямую регистрировать имена. Примерами общедоступных суффиксов являются ".com", ".co.uk" и "pvt.k12.wy.us". Список публичных суффиксов - это список всех известных публичных суффиксов.

Не существует ни одного регулярного выражения, которое бы разумно подходило к списку общедоступных суффиксов. Вам потребуется разработать код для использования списка публичных суффиксов или найти существующую библиотеку, которая уже делает это.

8
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: