Делает любой знает, что регулярное выражение соответствует Домену. CCTLD? Я не хочу субдомены, только "атомарный домен". Например, docs.google.com
не становится подобранным, но google.com
делает. Однако это сложно с материалом как .co.uk
, CCTLDs. Кто-либо знает решение?Заранее спасибо.
Править: Я понял, что также должен иметь дело с несколькими субдоменами, как john.doe.google.co.uk
. Нужно решение теперь более чем когда-либо :P.
На основе вашего комментария выше я собираюсь переосмыслить вопрос - вместо того, чтобы создавать регулярное выражение, которое будет соответствовать им, мы создадим функцию, которая будет соответствовать им, и примените эту функцию, чтобы отфильтровать список доменных имен, чтобы включить только домены первого класса, например 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
Я бы, вероятно, решил эту проблему, получив полный список 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, если вы знали, как работает регулярное выражение.)
Похоже, что вы ищете информацию, доступную через проект Public Suffix List.
Публичный суффикс - это суффикс, под которым пользователи Интернета могут напрямую регистрировать имена. Примерами общедоступных суффиксов являются ".com", ".co.uk" и "pvt.k12.wy.us". Список публичных суффиксов - это список всех известных публичных суффиксов.
Не существует ни одного регулярного выражения, которое бы разумно подходило к списку общедоступных суффиксов. Вам потребуется разработать код для использования списка публичных суффиксов или найти существующую библиотеку, которая уже делает это.