我可以使用什么正则表达式从Ruby中的URL获取域名?

我正在尝试构建一个正则表达式来提取给定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.这将工作,而不会引起任何错误www. 不在这里。

不太了解ruby,但这个正则表达式模式为您提供了url的最后3个部分,不包括尾部斜杠,每个部分最少2个字符。

 ([\w-]{2,}\.[\w-]{2,}\.[\w-]{2,})/$ 

您可以使用domain_name gem进行此类工作。 来自README:

 require "domain_name" host = DomainName("abexample.co.uk") host.domain #=> "example.co.uk" 

你的问题有点模糊。 你能准确说明你想要做什么吗? (最好使用测试套件。)现在,您的所有问题都表明您需要一种始终返回'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,有时随机丢弃部分FQDN,但根据什么规则? 例如,对于FQDN abc.google.com ,域名为google.com ,主机名为abc ,但您希望它返回abc.google.com ,而abc.google.com不仅是域名,还包括完整的 FQDN。 为什么?