ruby - 使用正则表达式获取 URL 的域

标签 ruby regex string parsing url

我正在尝试获取给定 URL 的域。例如 http://www.facebook.com/someuser/ 将返回 facebook.com。给定的 URL 可以是以下格式:

  1. https://www.facebook.com/someuser(www. 是可选的,但应忽略)
  2. www.facebook.com/someuser(http://不是必需的)
  3. facebook.com/someuser
  4. http://someuser.tumblr.com -> 这只能返回 tumblr.com

我写了这个正则表达式:

/(?:\.|\/{2})(?: www\.)?([^\/]*)/i

但它并没有像我预期的那样工作。

我可以分部分做:

  1. 使用 string.delete "/https?:\/\//删除 http://https://(如果存在于字符串上)我”.
  2. string.delete "/www\./i" 删除 www.
  3. 通过匹配和/(\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/

相关文章:

ruby - 如何检查我的输入字符串?

c# - 优化正则表达式方法(从文本行中分割字母数字单词)

java - 如何在正则表达式中表达多个空格?

Python - 使用 latex 格式中断字符串

java - 难以从用户处获取 ID

string - 在字符串中的每个字符后添加空格

ruby - 在 ruby 中压缩大字符串

ruby - 部署后的 Thinking Sphinx - ThinkingSphinx::SphinxError(搜索请求中的未知本地索引 'user_core'):

ruby - 为什么要使用 File.join()?

regex - ModRewrite 语句重定向到用户配置文件