【问题标题】:regex to remove the webpage part of a url in ruby正则表达式删除 ruby​​ 中 url 的网页部分
【发布时间】:2010-09-30 10:23:54
【问题描述】:

我正在尝试删除 URL 的网页部分

例如,

www.example.com/home/index.html 

www.example.com/home 

任何帮助表示赞赏。
谢谢

【问题讨论】:

标签: ruby regex


【解决方案1】:

尽可能不要使用正则表达式可能是个好主意。 You may summon Cthulhu。尝试改用标准库中的URI 库。

require "uri"
result = URI.parse("http://www.example.com/home/index.html")
result.host # => www.example.com
result.path # => "/home/index.html"
# The following line is rather unorthodox - is there a better solution?
File.dirname(result.path) # => "/home"
result.host + File.dirname(result.path) # => "www.example.com/home"

【讨论】:

  • +1 URL 不规则,无法用正则表达式解析,使用 URI lib
  • Addressable::URI 是另一个很好的 Ruby URI 模块,功能更全。不过,Ruby 的内置 URI 应该足以满足此目的。 github.com/sporkmonger/addressable
【解决方案2】:

如果您决定使用正则表达式并且您知道您的网址将非常简单,您可以使用(.*)/.* 来捕获网址中最后一个 / 之前的所有内容。

irb(main):007:0> url = "www.example.com/home/index.html"
=> "www.example.com/home/index.html"
irb(main):008:0> regex = "(.*)/.*"
=> "(.*)/.*"
irb(main):009:0> url =~ /#{regex}/
=> 0
irb(main):010:0> $1
=> "www.example.com/home"

【讨论】:

    【解决方案3】:
    irb(main):001:0> url="www.example.com/home/index.html"
    => "www.example.com/home/index.html"
    irb(main):002:0> url.split("/")[0..-2].join("/")
    => "www.example.com/home"
    

    【讨论】:

    • 虽然这在技术上有效,但它会在不同深度的 URL 上中断(/home/index.html vs /admin/users/index.html)。这就是 URI.parse 更好的原因。
    • @Jason:在什么情况下0..-2会崩溃?
    • 我重新阅读了这篇文章,你是对的,0..-2 应该总是有效的。不过,我仍然投票支持使用 URI.parse。
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2018-02-10
    • 2023-03-16
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多