我有一个字符串,想要返回最后一个
例如,对于
/
之后的所有内容。例如,对于
https://www.example.org/hackerbob
,应该返回"hackerbob"
。/
之后的所有内容。https://www.example.org/hackerbob
,应该返回"hackerbob"
。我认为正则表达式并不是一个好的选择,因为任务非常简单:
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"
分割:0.001005秒
,正则表达式:0.010026秒
)。你应该使用分割方法。 - Brandon Jackson选用合适的工具来完成工作:
require 'uri'
url = "https://www.facebook.com/hackerbob"
URI.parse(url).path[1..-1] # => "hackerbob"
example.org/user/hackerbob
这样的URL的问题(应该得到 hackerbob
的结果)。要真正回答这个问题,我们需要执行 URI.parse(url).path.split('/')[-1]
或类似的操作,但实际上与一开始就直接拆分字符串没有什么优势。 - Niklas B.再来一个例子
str = 'https://www.facebook.com/hackerbob'
ending = str.match(/.com\/(.*)/)
p ending[1]
可以使用这个
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
使用它
1.9.3p194 :039 > line = 'https://www.facebook.com/hackerbob'
1.9.3p194 :039 > line.match(/.com\/(\w+$)/)[1] # => "hackerbob"
.com\/
部分是不必要的... /(\w+$)/
应该足够了。 - Niklas B.当然可以:
string = 'https://www.facebook.com/hackerbob'
string =~ /^https?:\/\/www\.facebook\.com\/(.*)/
$1
'https://www.facebook.com/hackerbob'[/hackerbob/]
。但这可能不是您想要的。您所有的URL都是Facebook用户名吗?如果像“www.whatever.com/users/hackerbob”这样,您仍然只想要“hackerbob”,还是“users/hackerbob”?这个问题太模糊了。 - Joshua Cheek