Ruby on rails 什么';解析URL以提取域的最佳方法是什么?
可能重复:Ruby on rails 什么';解析URL以提取域的最佳方法是什么?,ruby-on-rails,ruby,regex,parsing,Ruby On Rails,Ruby,Regex,Parsing,可能重复: 我发现这个名为的模块可以解析url。(我对ruby很陌生。在本例中,“module”是“library”的同义词吗?) uri = URI.parse("http://www.ruby-lang.org/") ... p uri.host # => "www.ruby-lang.org" 由此,我想您可以删除“www”,并使用正则表达式保留其他子域 有人有更直接的选择吗?或者这种方法似乎正确吗?你可以使用gem获得你想要的:url.domain+url.public\u后缀
我发现这个名为的模块可以解析url。(我对ruby很陌生。在本例中,“module”是“library”的同义词吗?)
uri = URI.parse("http://www.ruby-lang.org/")
...
p uri.host
# => "www.ruby-lang.org"
由此,我想您可以删除“www”,并使用正则表达式保留其他子域
有人有更直接的选择吗?或者这种方法似乎正确吗?你可以使用gem获得你想要的:
url.domain+url.public\u后缀
,但是你可以做一些字符串操作,比如uri[4..-1]
,所以在发布我自己的答案时,我并不是说像domainatrix或public_suffix_server这样的gem不是很好的优雅解决方案(尽管后者立即在我身上安装了窃听器,导致我走这条路)
有人建议使用split()使我意识到,如果“www.”存在,我可以将其分出来,否则就可以保持域的原样,而无需安装gems和使用一行简单的代码:
url = request.original_url
domain = URI.parse(url).host.sub(/\Awww\./, '')
这适用于子域和多部分后缀(例如co.uk)。有人认为这有什么问题吗
编辑:感谢索伦斯指出我最初使用的弱正则表达式。这个表达式当然更好。ruby肯定有某种
split()
功能。那么,你为什么不在www.
上拆分字符串并保留后面的部分呢?你到底想要什么?只需从uri.host
中删除“www”?库通常是一个自包含的代码资源,可以包含一个、多个或更少的模块或类URI
是Ruby核心库中的一个模块,这意味着它可以在您运行的任何Ruby代码中使用。对于所有其他代码,您必须使用split('www.')将其显式加载到应用程序中,但如果主机是www.example.com,它会给我一个数组,如果主机是example.com,它会给我一个字符串,因此我必须使用条件。看来无论如何我都得这么做。我只是觉得有一种更有效的方法。当然有sub()方法可以删除“www”。如果它找到它。。。回答如下。这颗宝石很好。我想我可以显示!=”的子域www'
。您应该收紧正则表达式www.
将匹配www
的任何字符串和任何其他字符。句点是一个特殊的正则表达式字符,表示任何单个字符。因此,如果您针对该站点进行测试,您最终将删除“www2”并保留009.org。至少,尝试<代码> \AWWW \/COD> >“A”将强制检查只在字符串的开头考虑,而“\”将逃离该周期,意味着您只在查找期间字符。如果你在正则表达式方面有困难,这是一个很好的帮助资源。