【问题标题】:Split URL based on characters in Ruby根据 Ruby 中的字符拆分 URL
【发布时间】:2017-01-10 10:02:31
【问题描述】:

我想知道如何最好地用/ 分割以下字符串,但忽略某些字符

所以我的字符串看起来像这样

url = http://10.0.3.2/i/av/Genymotionvbox86p/android/10~3~1/0/-/-/a3306aa6~0346~4ad5~bdf5~1bc7c20a88ab/0/test~page/-/-/video/live/-/one_hd/-/0/1/0~0/-/0~0/0~0/?trace=skwthffdsy

我想通过/ 拆分,忽略http:// 和最后的查询字符串,期望的结果看起来像

["i", "av", "Genymotionvbox86p", "android", "10~3~1", "0", "-", "-",
  "a3306aa6~0346~4ad5~bdf5~1bc7c20a88ab", "0", "test~page", "-", "-",
  "video", "live", "-", "one_hd", "-", "0", "1", "0~0", "-", "0~0", "0~0"]

所以目前url.split('/') 让我到目前为止,但它是我坚持的排除或某些字符

也许使用scan 会更好?

【问题讨论】:

  • 知道 URL 将始终采用这种格式吗? “http(s)://”会一直存在吗?最后的任何参数之前是否总是有一个“/”? url.split('/')[3..-2] 是一个简单的解决方案,但不适用于许多可能的 URL 格式。
  • 是的,url should 总是采用这种格式,我无法想象 http(s) 会出现在其他任何地方。我考虑过获取 url,然后使用 gsub 删除我不想要的内容,但是在向字符串添加更多参数后,解决方案似乎仍然有效
  • Are you sure??!!...“www.google.com/search?q=example”是一个有效的 URL,它不具有这些属性。 split('/')[3..-2] 方法将因此失败。
  • 事实上,更更糟糕是查询参数也包含“/”!例如。 ""www.google.com/search?q=what/about/this" 使用 split 方法会给您带来更糟糕的结果。
  • @TomLord: 好吧,来自 stdlib 的URI 在没有方案部分的情况下完全倒下。将域视为路径的一部分。

标签: ruby


【解决方案1】:

试试这个:

require 'uri'
URI(url).path.sub(%r{^/}, "").split("/")

编辑:为什么要使用gsub,而sub 更短更快也很好。

【讨论】:

    【解决方案2】:

    也许是这样的?

    url.split('/')[3..-2]
    

    [3..-2] 表示数组的范围,它获取索引3 到索引-2 的所有元素

    -2 
    

    表示前一个

    【讨论】:

    • 谢谢,你介意解释一下[3..-2]吗?
    • 见:ary[range]
    • 谢谢,现在说得通了
    • 如果查询部分包含斜杠,例如?trace=skw/thf/f/ds,此方法将无法正常工作。
    • @Richlewis:您应该使用合适的工具来完成这项工作(uri 解析库)。像这样的硬编码数组偏移是非常脆弱的,而且根本不是面向未来的。很大程度上取决于查询字符串的内容。
    猜你喜欢
    • 2021-03-20
    • 2014-10-19
    • 2018-05-12
    • 1970-01-01
    • 2019-09-19
    • 2021-10-30
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多