Какой regex я могу использовать для получения доменного имени от URL в Ruby?

Я пытаюсь создать regex для извлечения домена, учитывая URL.

для:

http://www.abc.google.com/
http://abc.google.com/
https://www.abc.google.com/
http://abc.google.com/

должен дать:

abc.google.com
6
задан the Tin Man 27 April 2011 в 06:44
поделиться

3 ответа

URI.parse('http://www.abc.google.com/').host
#=> "www.abc.google.com"

Не регулярное выражение, но, вероятно, более надежное, чем все, что мы здесь придумали.

URI.parse('http://www.abc.google.com/').host.gsub(/^www\./, '')

Если вы хотите удалить www. также будет работать без каких-либо ошибок, если www. там нет.

25
ответ дан 8 December 2019 в 04:27
поделиться

Ваш вопрос немного расплывчатый . Можете ли вы точно указать, что именно вы хотите сделать? (Желательно с набором тестов.) Прямо сейчас ваш вопрос состоит в том, что вам нужен метод, который всегда возвращает 'abc.google.com' . Это просто:

def extract_domain
  return 'abc.google.com'
end

Но, вероятно, вы имели в виду не это…

Кроме того, вы говорите, что вам нужно Regexp . Почему? Что не так, например, с использованием класса URI ? В конце концов, синтаксический анализ и управление URI - это именно то, для чего он был создан!

require 'uri'

URI.parse('https://abc.google.com/').host # => 'abc.google.com'

И, наконец, вы говорите, что « пытаетесь извлечь домен », но никогда не указываете, что вы имеете в виду под «доменом». Похоже, вы иногда имеете в виду полное доменное имя, а иногда случайно отбрасываете части полного доменного имени, но по каким правилам? Например, для FQDN abc.google.com имя домена - google.com , а имя хоста - abc , но вы хотите, чтобы оно возвращало abc.google.com - это не просто имя домена, а полное полное доменное имя . Почему?

-1
ответ дан 8 December 2019 в 04:27
поделиться

Не очень много знаю о Ruby, но этот шаблон регулярного выражения дает вам последние 3 части URL-адреса, за исключением завершающей косой черты, с минимальным количеством символов 2 на часть.

([\w-]{2,}\.[\w-]{2,}\.[\w-]{2,})/$
1
ответ дан 8 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

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