Я пытаюсь создать regex для извлечения домена, учитывая URL.
для:
http://www.abc.google.com/
http://abc.google.com/
https://www.abc.google.com/
http://abc.google.com/
должен дать:
abc.google.com
URI.parse('http://www.abc.google.com/').host
#=> "www.abc.google.com"
Не регулярное выражение, но, вероятно, более надежное, чем все, что мы здесь придумали.
URI.parse('http://www.abc.google.com/').host.gsub(/^www\./, '')
Если вы хотите удалить www.
также будет работать без каких-либо ошибок, если www.
там нет.
Ваш вопрос немного расплывчатый . Можете ли вы точно указать, что именно вы хотите сделать? (Желательно с набором тестов.) Прямо сейчас ваш вопрос состоит в том, что вам нужен метод, который всегда возвращает '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
- это не просто имя домена, а полное полное доменное имя . Почему?
Не очень много знаю о Ruby, но этот шаблон регулярного выражения дает вам последние 3 части URL-адреса, за исключением завершающей косой черты, с минимальным количеством символов 2 на часть.
([\w-]{2,}\.[\w-]{2,}\.[\w-]{2,})/$