【发布时间】:2013-03-03 09:54:30
【问题描述】:
我有一个网址,例如:
http://www.relevantmagazine.com/life/relationship/blog/23317-pursuing-singleness
并且想从中提取相关杂志。
目前我有:
@urlroot = URI.parse(@link.url).host
但它返回 www.relevantmagazine.com 谁能帮助我?
【问题讨论】:
我有一个网址,例如:
http://www.relevantmagazine.com/life/relationship/blog/23317-pursuing-singleness
并且想从中提取相关杂志。
目前我有:
@urlroot = URI.parse(@link.url).host
但它返回 www.relevantmagazine.com 谁能帮助我?
【问题讨论】:
为此使用 gem 可能有点矫枉过正,但无论如何:有一个名为 domainatrix 的方便 gem,可以在处理两个元素顶级域等事务时为您提取站点名称。
url = Domainatrix.parse("http://www.pauldix.net")
url.url # => "http://www.pauldix.net" (the original url)
url.public_suffix # => "net"
url.domain # => "pauldix"
url.canonical # => "net.pauldix"
url = Domainatrix.parse("http://foo.bar.pauldix.co.uk/asdf.html?q=arg")
url.public_suffix # => "co.uk"
url.domain # => "pauldix"
url.subdomain # => "foo.bar"
url.path # => "/asdf.html?q=arg"
url.canonical # => "uk.co.pauldix.bar.foo/asdf.html?q=arg"
【讨论】:
pilot.consulting.aero 才意识到consulting.aero 是顶级域。 :-D
怎么样
@urlroot = URI.parse(@link.url).host.gsub("www.", "").split(".")[0]
【讨论】:
试试这个正则表达式:
regex = %r{http://[w]*[\.]*[^/|$]*}
如果您有以下 url 字符串,它会给出以下内容:
url = 'http://www.google.com/?q=blah'
url.scan(regex) => ["http://www.google.com"]
url = 'http://google.com/?q=blah'
url.scan(regex) => ["http://google.com"]
url = 'http://google.com'
url.scan(regex) => ["http://google.com"]
url = 'http://foo.bar.pauldix.co.uk/asdf.html?q=arg'
url.scan(regex) => ["http://foo.bar.pauldix.co.uk"]
它并不完美,但它会删除除前缀和主机名之外的所有内容。然后,您可以使用其他代码轻松清理前缀,现在您只需在字符串的开头查找 http:// 或 http://www.。另一个想法是,如果你还要解析https://,你可能需要稍微调整一下我给你的正则表达式。我希望这可以帮助您入门!
编辑:
我重新阅读了这个问题,并意识到我的回答并没有真正满足您的要求。我想知道你是否知道你正在解析的网址是否有一个固定的格式可能会有所帮助,就像总是有 www。如果是这样,您可以使用正则表达式来提取 url 中第一个和第二个句点之间的所有内容。如果没有,也许您可以调整我的正则表达式,使其成为 / 或 www 之间的所有内容。和第一期。这可能是仅获取没有 www 的站点名称的最简单方法。或 .com 或 .au.uk 等。
修改正则表达式:
regex = %r{http://[w]*[\.]*[^\.]*}
url = 'http://foo.bar.pauldix.co.uk/asdf.html?q=arg'
url.scan(regex) => ["http://foo"]
这会很奇怪。如果您使用正则表达式的东西,您可能必须逐步清理 url 以提取您想要的部分。
【讨论】:
也许你可以把它分开?
URI.parse(@link.url).host.split('.')[1]
请注意,某些注册域名可能包含多个注册国家/地区域名的组成部分,例如 .co.uk 或 .co.jp 或 .com.au。
【讨论】:
/example而不是http://example.com/example。
我发现答案的灵感来自 tadman 的回答和the answer in another question
@urlroot = URI.parse(item.url).host
@urlroot = @urlroot.start_with?('www.') ? @urlroot[4..-1] : @urlroot
@urlroot = @urlroot.split('.')[0]
第一行获取主机,第二行获取删除 www。如果它们是第一行和第三行,则在下一个点之前获取所有内容。
【讨论】: