可能重复:
Ruby代码从URL字符串中提取主机
我发现这个模块叫做 URI 这可以解析网址。 (我对ruby很新。在这种情况下,'module'是'library'的同义词吗?)然后你可以提取主机名。
uri = URI.parse("http://www.ruby-lang.org/")
...
p uri.host
# => "www.ruby-lang.org"
从这个,我想你可以删除'www。'并使用正则表达式保留其他子域。
有没有人有更直接的选择,或者这种方法是否正确?
可能重复:
Ruby代码从URL字符串中提取主机
我发现这个模块叫做 URI 这可以解析网址。 (我对ruby很新。在这种情况下,'module'是'library'的同义词吗?)然后你可以提取主机名。
uri = URI.parse("http://www.ruby-lang.org/")
...
p uri.host
# => "www.ruby-lang.org"
从这个,我想你可以删除'www。'并使用正则表达式保留其他子域。
有没有人有更直接的选择,或者这种方法是否正确?
您可以使用 domainatrix 宝石得到你想要的: url.domain + url.public_suffix
,但你可以像做一些字符串操作 uri[4..-1]
。
因此,在发布我自己的答案时,我并不是说像domainatrix或public_suffix_server这样的宝石并不是优雅的解决方案(虽然后者立刻给我带来了麻烦,导致我走这条路)。
人们建议使用split()让我意识到我可以放弃'www。'如果它存在并以其他方式保留域而不安装gem并使用1个简单的代码行:
url = request.original_url
domain = URI.parse(url).host.sub(/\Awww\./, '')
这适用于子域和多部分后缀(例如co.uk)。有人看到这个有什么不对吗?
编辑:谢谢sorens指出我最初使用的弱正则表达式。这个表达肯定更好。