我正在尝试获取给定 URL 的域。例如 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
但它并没有像我预期的那样工作。
我可以分部分做:
- 使用
string.delete "/https?:\/\//删除
.http://
和https://
(如果存在于字符串上)我” - 用
string.delete "/www\./i"
删除www.
。 - 通过匹配和
/(\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
我需要它以尽可能少的内存和处理海岸工作。
有什么想法吗?
最佳答案
您为什么不直接使用 URI 类来执行此操作?
URI.parse( your_uri ).host
你已经完成了。
只有一件事,如果 url 开头没有“http://”或“https://”,则必须添加一个,否则 parse 方法不会为您提供主机(它将为零)。
关于ruby - 使用正则表达式获取 URL 的域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823143/