Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么';解析URL以提取域的最佳方法是什么?_Ruby On Rails_Ruby_Regex_Parsing - Fatal编程技术网

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”将强制检查只在字符串的开头考虑,而“\”将逃离该周期,意味着您只在查找期间字符。如果你在正则表达式方面有困难,这是一个很好的帮助资源。