37

我有一个字符串想要/返回最后一个之后的所有内容。

例如https://www.example.org/hackerbob,它应该返回"hackerbob"

4

7 回答 7

80

我不认为正则表达式是一个好主意,看看任务是多么简单:

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"
于 2012-06-18T11:27:12.903 回答
10

为工作使用正确的工具:

require 'uri'
url = "https://www.facebook.com/hackerbob"
URI.parse(url).path[1..-1]  # => "hackerbob"
于 2012-06-18T11:35:32.997 回答
2

再来一份样品

str = 'https://www.facebook.com/hackerbob'
ending = str.match(/.com\/(.*)/)
p ending[1]
于 2012-06-18T11:28:54.650 回答
0

你当然可以:

string = 'https://www.facebook.com/hackerbob'
string =~ /^https?:\/\/www\.facebook\.com\/(.*)/
$1
于 2012-06-18T11:08:51.747 回答
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
于 2012-06-18T11:23:59.800 回答
0

用它

 1.9.3p194 :039 > line = 'https://www.facebook.com/hackerbob'
 1.9.3p194 :039 > line.match(/.com\/(\w+$)/)[1]  #    => "hackerbob"
于 2012-06-18T11:24:59.243 回答
0

您可以尝试 /[a-zA-Z]+://[az]+.[az]+.[az]+/(.+)/ 如果您将它用于上面的字符串或任何其他类似的网址。用于正则表达式的一个很好的工具是http://www.rubular.com

于 2012-06-18T11:29:14.400 回答