解析URL以提取域名的最佳方法是什么?

时间:2011-02-27 12:52:54

标签: ruby-on-rails ruby regex parsing

  

可能重复:
  Ruby code to extract host from URL string

我发现这个名为URI的模块可以解析网址。 (我对ruby很新。在这种情况下,'module'是'library'的同义词吗?)然后你可以提取主机名。

uri = URI.parse("http://www.ruby-lang.org/")
...
p uri.host
# => "www.ruby-lang.org"

据此,我想你可以删除'www。'并使用正则表达式保留其他子域。

有没有人有更直接的选择,或者这种做法是否正确?

2 个答案:

答案 0 :(得分:8)

因此,在发布我自己的答案时,我并不是说像domainatrix或public_suffix_server这样的宝石并不是优雅的解决方案(尽管后者立即对我造成了影响,导致我走这条路)。

人们建议使用split()让我意识到我可以放弃'www。'如果它存在并以其他方式保留域而不安装gem并使用一行简单的代码:

url = request.original_url
domain = URI.parse(url).host.sub(/\Awww\./, '')

这适用于子域和多部分后缀(例如co.uk)。有人看到这个有什么不对吗?

编辑:感谢sorens指出我最初使用的弱正则表达式。这个表达当然更好。

答案 1 :(得分:4)

你可以使用domainatrix gem来获得你想要的东西:url.domain + url.public_suffix,但你可以像uri[4..-1]那样进行一些字符串操作。