web-dev-qa-db-ja.com

Ruby文字列で最後のスラッシュ(/)の後のすべてをどのように返すことができますか?

最後の/以降のすべてが返されるようにしたい文字列があります。

例えば。 https://www.example.org/hackerbobの場合、"hackerbob"を返します。

31
Hendrik

私は正規表現は良い考えではないと思います、タスクがいかに単純かを見て:

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"
69
Niklas B.

ジョブに適したツールを使用します。

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

もう1つのサンプル

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

これを使用できます

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
Cylian

これを使って

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

できますよ:

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

/[a-zA-Z]+://[a-z]+.[a-z]+.[a-z]+/(.+)/を上記の文字列または他の同様のURLに使用している場合は、それを試すことができます。正規表現に使用する優れたツールは http://www.rubular.com です。

0
NahAbiah