在Ruby中提取URI的最后一段的最佳方法

25

给定如下URI字符串:

http://www.somesite.com/abc
http://www.somesite.com/alpha/beta/abc
http://www.somesite.com/alpha/abc

在Ruby中,最优雅的方式是什么,可以获取这些URI结尾的abc


3
@oldergod: http://example.com/where?is=pancakes/house%3F 可以翻译为:在这个链接中,"http://example.com/where?is=pancakes/house%3F" 表示 "煎饼屋" 的地址。 - mu is too short
@muistooshort,你会怎么做?从第一个“?”之前的最后一个“/”获取所有内容? - oldergod
@oldergod:是的,看看Gumbo的回答。 - mu is too short
6个回答

61

我会使用一个像URI模块中的合适的URI解析器来获取URI中的路径。然后在/处分割它并获取其中的最后一部分:

require 'uri'

URI(uri).path.split('/').last

@oldergod 那你得到了什么? - Gumbo
1
@muistooshort 你可以使用 path.chomp('/') 在分割之前将它们移除。 - Gumbo

15
uri.split('/')[-1] 
或者
uri.split('/').last 

6

虽然在这里提供的所有split用法都是合法的,但我认为@matsko的答案是代码更易读的一个。

last = File.basename(url)

4
尝试以下内容:
if url =~ /\/(.+?)$/
  last = $1
end

或者

last = File.basename(url)

2

从终端命令行:

ruby -ruri -e "print File.basename(URI.parse('$URI').path)"

从你的 .rb 源文件内部:

require 'uri'
theURI = 'http://user:pass@example.com/foo/bar/baz/?lala=foo'
uriPathTail = File.basename(URI.parse(theURI).path) # => baz

它可以与您使用的任何合法URI很好地配合使用。

如果您不使用URI.parse(),则url中的任何参数都会被错误地视为URI的最后一段。


2
如果值是任意字符串+URI,则下面的解决方案应该有效。
首先,从字符串中提取URI:
uri_string = URI.extract("Test 123 http://www.somesite.com/abc")

以上命令返回一个数组

然后使用以下命令提取URI的最后一部分:

uri_string[0].split('/').last

先决条件:需要在Ruby脚本中添加"uri"要求

Original Answer翻译成"最初的回答"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接