我正在尝试获取给定网址的域名。例如,http://www.facebook.com/someuser/
将返回facebook.com
。给定的URL可以采用以下格式:
https://www.facebook.com/someuser
(www。是可选的,但应该被忽略)www.facebook.com/someuser
(http://不是必需的)facebook.com/someuser
http://someuser.tumblr.com
- >这必须只返回tumblr.com
我写了这个正则表达式:
/(?: \.|\/{2})(?: www\.)?([^\/]*)/i
但它没有像我期望的那样起作用。
我可以部分地这样做:
http://
删除https://
和string.delete "/https?:\/\//i"
(如果字符串中存在)。www.
删除string.delete "/www\./i"
。/(\w+\.\w+)+/i
但这不适用于子域名。 用于测试的字符串:
https://www.facebook.com/username
http://last.fm/user/username
www.google.com
facebook.com/username
http://sub.tumblr.com/
sub.tumblr.com
我需要这个以尽可能少的内存和处理海岸。
有什么想法吗?
答案 0 :(得分:10)
为什么不直接使用URI类来执行此操作?
URI.parse( your_uri ).host
你已经完成了。
只有一件事,如果在网址的开头没有“http://”或“https://”,则必须添加一个,否则解析方法不会为您提供主机(它将是零)。
答案 1 :(得分:2)
这对我有用:/^h?t?t?p?s?:?\/?\/?w?w?w?\.?(.*\.[A-Z]{2,})+[A-Z\/]/i
它总是只为您提供域名部分
看看它:
http://rubular.com/r/0hudnJSgVT
要使用它创建一个这样的方法,我把它放在我的助手中,这样我就可以在视图中访问。
def website_url(website_url)
if website_url[/^h?t?t?p?s?:?\/?\/?w?w?w?\.?(.*\.[A-Z\/]{2,})$/i]
website_id = $1
end
%Q{http://#{ website_id }}
end
答案 2 :(得分:1)
它必须是正则表达式吗?你也可以这样做。
require 'uri'
yourURL = URI.parse('https://www.facebook.com/username')
print yourURL.host
答案 3 :(得分:0)
您可以使用此正则表达式:
/(\w+\.\w{2,6})(?:\/|$)/
答案 4 :(得分:0)
如果您真的想使用正则表达式,可以尝试以下方式:
test_string.scan(/\w+\.\w+(?=\/|\s|$)/) { |match| do_stuff_with(match) }
这不会考虑域名,例如something.co.uk,但它会匹配测试字符串中的所有内容。
答案 5 :(得分:0)
我已经通过打开课程技术为我的目的创建了 String 类的函数。
class String
def to_dn
return '' if self.blank?
return self.split('@').last if self.match('@')
link = self
link = "http://#{link}" unless link.match(/^(http:\/\/|https:\/\/)/)
link = URI.parse(URI.encode(link)).host.present? ? URI.parse(URI.encode(link)).host : link.strip
domain_name = link.sub(/.*?www./,'')
domain_name = domain_name.match(/[A-Z]+.[A-Z]{2,4}$/i).to_s if domain_name.split('.').length >= 2 && domain_name.match(/[A-Z]+.[A-Z]{2,4}$/i).present?
end
end
示例:
1. "https://www.facebook.com/someuser".to_dn = "facebook.com"
2. "www.facebook.com/someuser".to_dn = "facebook.com"
3. "facebook.com/someuser".to_dn = "facebook.com"
4. "http://someuser.tumblr.com".to_dn = "tumblr.com"
5. "dc.ads.linkedin.com".to_dn = "linkedin.com"
6. 'your_name@domain.com'.to_dn = "domain.com"
它也适用于电子邮件地址(这需要我的目的)。希望它对其他人有用。如果您发现任何错误,请纠正我:)
注意:它不适用于“www.domainname.co.in”。我正在努力:)