如何在 Ruby 字符串中返回最后一个斜杠(/)之后的所有内容?

39
我有一个字符串,想要返回最后一个/之后的所有内容。
例如,对于https://www.example.org/hackerbob,应该返回"hackerbob"

1
如果您能解释如何找到“hackerbob”(例如,提供其他需要解析的URL示例),那将非常有帮助。目前,您只能使用'https://www.facebook.com/hackerbob'[/hackerbob/]。但这可能不是您想要的。您所有的URL都是Facebook用户名吗?如果像“www.whatever.com/users/hackerbob”这样,您仍然只想要“hackerbob”,还是“users/hackerbob”?这个问题太模糊了。 - Joshua Cheek
1
@JoshuaCheek:从标题来看,我会认为 OP 想要匹配最后一个正斜杠后面的 URL 部分。 - Niklas B.
应该是最后一个斜杠后面的所有内容。 - Hendrik
7个回答

84

我认为正则表达式并不是一个好的选择,因为任务非常简单:

irb(main):001:0> s = 'https://www.facebook.com/hackerbob'
=> "https://www.facebook.com/hackerbob"
irb(main):002:0> s.split('/')[-1]
=> "hackerbob"

当然,你也可以使用正则表达式来完成,但这样做会使代码变得难以理解:

irb(main):003:0> s[/([^\/]+)$/]
=> "hackerbob"

4
不使用锤子打螺丝,这点子赞一个。 - Lars Haugseth
谢谢。分割的想法也很好。 - Hendrik
你也可以使用String#rpartition - Cisuuable
1
除了可读性较差之外,正则表达式方法的速度也比分割方法慢大约10倍,尽管只有0.01秒的差距(分割:0.001005秒正则表达式:0.010026秒)。你应该使用分割方法。 - Brandon Jackson
@Ekkstein 你在说什么? - Niklas B.
@Niklas B. 抱歉,问题不在于你的回答,而是我的字符串的一部分。这个答案很好用。 - Ekkstein

10

选用合适的工具来完成工作:

require 'uri'
url = "https://www.facebook.com/hackerbob"
URI.parse(url).path[1..-1]  # => "hackerbob"

3
我认为这并没有完全回答关于像 example.org/user/hackerbob 这样的URL的问题(应该得到 hackerbob 的结果)。要真正回答这个问题,我们需要执行 URI.parse(url).path.split('/')[-1] 或类似的操作,但实际上与一开始就直接拆分字符串没有什么优势。 - Niklas B.

2

再来一个例子

str = 'https://www.facebook.com/hackerbob'
ending = str.match(/.com\/(.*)/)
p ending[1]

0

可以使用这个

subject = /(\/)([^\/]+)\Z/i.match(subject)
if match
    # match start: match.begin(0)
    # match end (exclusive): match.end(0)
    # matched text: match[0]
    # backreference n start: match.begin(n)
    # backreference n end (exclusive): match.end(n)
    # backreference n text: match[n]
else
    # Match attempt failed
end

0

使用它

 1.9.3p194 :039 > line = 'https://www.facebook.com/hackerbob'
 1.9.3p194 :039 > line.match(/.com\/(\w+$)/)[1]  #    => "hackerbob"

正则表达式中的.com\/部分是不必要的... /(\w+$)/ 应该足够了。 - Niklas B.
如果用户名是“hacker.bob.9”,这将无法正常工作。 - courtsimas

0

当然可以:

string = 'https://www.facebook.com/hackerbob'
string =~ /^https?:\/\/www\.facebook\.com\/(.*)/
$1

0
如果您正在使用上述字符串或任何类似的URL,可以尝试使用/[a-zA-Z]+://[a-z]+.[a-z]+.[a-z]+/(.+)/。用于正则表达式的绝佳工具是http://www.rubular.com

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