2012-06-18 30 views
24

Tôi có một chuỗi muốn mọi thứ sau khi trả lại số / cuối cùng.Làm thế nào bạn có thể trả lại mọi thứ sau dấu gạch chéo cuối cùng (/) trong chuỗi Ruby

Ví dụ: cho https://www.example.org/hackerbob, nó sẽ trả lại "hackerbob".

+1

Nó sẽ rất hữu ích nếu bạn có thể giải thích làm thế nào để tìm thấy "hackerbob" (ví dụ như cung cấp cho các ví dụ khác của các url bạn cần phải phân tích cú pháp), như là, bạn chỉ có thể làm ''https://www.facebook.com/hackerbob' [/ hackerbob /]' Nhưng đó có lẽ không phải là những gì bạn muốn. Tất cả các url của bạn chỉ là tên người dùng Facebook? Điều gì sẽ xảy ra nếu nó giống như 'www.whatever.com/users/hackerbob' bạn vẫn chỉ muốn hackerbob hoặc 'users/hackerbob'? Câu hỏi này quá mơ hồ. –

+1

@JoshuaCheek: Từ tiêu đề tôi muốn nói rằng OP muốn khớp một phần của URL sau dấu gạch chéo cuối cùng. –

+0

Phải là mọi thứ sau dấu gạch chéo cuối cùng. – Hendrik

Trả lời

61

Tôi không nghĩ rằng một regex là một ý tưởng tốt, nhìn thấy như thế nào nhiệm vụ đơn giản là:

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

Tất nhiên bạn cũng có thể làm điều đó bằng regex, nhưng nó là rất nhiều ít có thể đọc:

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

+1 không sử dụng búa để điều khiển vít. –

+0

cảm ơn. ý tưởng chia cũng tốt. – Hendrik

+0

Bạn cũng có thể sử dụng [String # rpartition] (http://ruby-doc.org/core-2.2.3/String.html#method-i-rpartition) – Cisuuable

0

Chắc chắn bạn có thể:

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

Có thể sử dụng này

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

sử dụng nó

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

Phần '.com \/'của regex là không cần thiết ...'/(\ w + $)/'phải là đủ. –

2

Thêm một mẫu

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

Bạn có thể thử/[a-zA-Z] +: // [az] +. [az] +. [az] +/(. +)/nếu bạn đang sử dụng nó cho chuỗi ở trên hoặc bất kỳ url tương tự nào khác. Một công cụ tuyệt vời để sử dụng cho regex là http://www.rubular.com

8

Sử dụng các công cụ thích hợp cho công việc:

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

Tôi nghĩ rằng điều này không hoàn toàn trả lời câu hỏi cho các URL như 'example.org/user/hackerbob' (sẽ dẫn đến' hackerbob'). Để thực sự trả lời câu hỏi, chúng ta phải làm 'URI.parse (url) .path.split ('/') [- 1]' hoặc một cái gì đó, mà sau đó không có lợi thế thực sự hơn là chỉ tách chuỗi trong chuỗi đầu tiên địa điểm –

Các vấn đề liên quan