我可以使用什么正则表达式从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。 为什么?