2010-02-16 38 views
8

vì vậy, tôi có một số loại url nội bộ: ví dụ: "/img/pic/Image1.jpg" hoặc "/pic/Image1.jpg" hoặc chỉ "Image1.jpg" và tôi cần để phù hợp với "Image1.jpg" này nói cách khác tôi muốn khớp chuỗi ký tự cuối cùng sau/hoặc nếu không có/không chỉ là chuỗi ký tự. Cảm ơn bạn trước!Kết hợp từ cuối cùng sau/

+0

regex là phổ quát) nhưng nó cho javascript regex –

+3

regexes không phổ biến, có một số hương vị với các khả năng khác nhau. Nhưng regex Perl này sẽ làm nhiệm vụ của bạn: '^ (?:. * /) * (. *) $' –

+1

bạn không cần regex cho việc này.sử dụng ngôn ngữ yêu thích của bạn, chia thành "/" và sau đó lấy phần tử cuối cùng. Đơn giản hơn nhiều so với chế tác regex. – ghostdog74

Trả lời

11

.*/(.*) sẽ không hoạt động nếu không có/s.

([^/]*)$ nên hoạt động cho dù có hay không.

+0

Nhưng '[\ s \ S] */(. *)' Sẽ. – Gumbo

2
.*/([^/]*) 

Nhóm chụp phù hợp với chuỗi cuối cùng sau /.

+0

Sẽ không khớp với 'Image1.jpg' –

1

Các biểu thức sau đây sẽ làm các trick.

/([\w\d._-]*)$ 

Hoặc thậm chí dễ dàng hơn (nhưng tôi nghĩ rằng đây cũng đã được đăng tải dưới đây trước khi tôi)

([^/]+)$ 
0

Something như */(*.) $ (chi tiết phụ thuộc vào việc chúng ta đang nói về Perl hay một số phương ngữ khác của cụm từ thông dụng)

Đầu tiên. * khớp mọi thứ (kể cả dấu gạch chéo). Sau đó, có một dấu gạch chéo, sau đó có. * Phù hợp với tất cả mọi thứ từ dấu gạch chéo đó đến cùng (đó là $).

* Hoạt động tham lam từ trái sang phải, có nghĩa là khi bạn có nhiều dấu gạch chéo, cột đầu tiên. * Sẽ khớp với tất cả trừ dấu gạch cuối cùng.

+0

Regex * yêu cầu * dấu gạch chéo, vì vậy' Image1.jpg' sẽ không khớp với –

1

Trong Ruby Bạn sẽ viết

([^\/]*)$ 

regexps trong Ruby là khá phổ biến và Bạn có thể kiểm tra chúng sống ở đây: http://rubular.com/ Bằng cách này: có thể có một giải pháp khác mà không liên quan đến regexps? Ví dụ: File.basenam(path) (Ruby lại)

Chỉnh sửa: profjim đã đăng nó trước đó.

1

Tôi nhận thấy bạn đã nói trong nhận xét của bạn rằng bạn đang sử dụng javascript. Bạn không thực sự cần một regex cho điều này và tôi luôn luôn nghĩ rằng nó tốt đẹp để có một thay thế cho việc sử dụng regex.

var str = "/pic/Image1.jpg"; 
str.split("/").pop(); 

// example: 
alert("/pic/Image1.jpg".split("/").pop());  // alerts "Image1.jpg" 
alert("Image2.jpg".split("/").pop());   // alerts "Image2.jpg" 
10

Thực ra bạn không cần regexp cho việc này.

s="this/is/a/test" 
s.substr(s.lastIndexOf("/")+1) 
=> test 

và nó cũng hoạt động tốt cho các chuỗi mà không cần bất kỳ / vì sau đó lastIndexOf trả về -1.

s="hest" 
s.substr(s.lastIndexOf("/")+1) 
=> hest 
1

Một regex đơn giản mà tôi đã thử nghiệm:

\w+(.)\w+$ 

Đây là một trang web tốt, bạn có thể thử nghiệm nó trên: http://rubular.com/

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