2010-02-16 13 views
8

, więc mam pewien rodzaj internowanych adresów URL: na przykład "/img/pic/Image1.jpg" lub "/pic/Image1.jpg" lub po prostu "Image1.jpg" i potrzebuję aby dopasować to "Image1.jpg", innymi słowy chcę dopasować ostatnią sekwencję znaków po/lub jeśli nie ma/po prostu sekwencji znaków. Z góry dziękuję!Dopasuj ostatnie słowo po/

+0

regex jest uniwersalna), ale to dla javascript regex –

+3

Wyrażenia regularne nie są uniwersalny, istnieje kilka smaków o różnych możliwościach. Ale to wyrażenie Perla wykona twoje zadanie: '^ (?:. * /) * (. *) $' –

+1

nie potrzebujesz do tego celu wyrażenia regularnego.użyj swojego ulubionego języka, podziel na "/", a następnie zdobądź ostatni element. Znacznie prostsze niż tworzenie regex. – ghostdog74

Odpowiedz

11

.*/(.*) nie będzie działać, jeśli nie ma/s.

([^/]*)$ powinien działać niezależnie od tego, czy istnieje, czy nie.

+0

Ale '[\ s \ S] */(. *)' Będzie. – Gumbo

2
.*/([^/]*) 

Grupa przechwytująca dopasowuje ostatnią sekwencję po /.

+0

Nie pasuje do 'Image1.jpg' –

1

Poniższe wyrażenie by rade.

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

Albo jeszcze łatwiejszy (ale myślę, że ten został również opublikowany poniżej przede mną)

([^/]+)$ 
0

Coś */(*.) $ (szczegóły zależą od tego, czy mówimy o Perlu, czy innym dialekcie wyrażeń regularnych)

Po pierwsze. * dopasowuje wszystko (w tym ukośniki). Następnie jest jeden ukośnik, a następnie. * Który dopasowuje wszystko od tego ukośnika do końca (to jest $).

* Działa łapczywie od lewej do prawej, co oznacza, że ​​gdy masz wiele ukośników, pierwszy. * Będzie pasował do wszystkich oprócz ostatniego.

+0

Twoje wyrażenie * wymaga * ukośnika, więc' Obraz1.jpg' nie będzie pasował –

1

W Ruby Można by napisać

([^\/]*)$ 

wyrażeń regularnych w Ruby są dość uniwersalne i można je testować żyć tutaj: http://rubular.com/ Przy okazji: być może istnieje inne rozwiązanie, które nie wymaga wyrażeń regularnych? E.g File.basenam(path) (ponownie Ruby)

Edytuj: profjim opublikował go wcześniej.

1

Zauważyłem, że powiedziałeś w swoich komentarzach, że używasz javascript. W rzeczywistości nie potrzebujesz do tego wyrażeń regularnych i zawsze myślę, że fajnie jest mieć alternatywę do używania 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

Właściwie nie potrzebujesz do tego celu wyrażeń regularnych.

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

i również działa dobrze na smyczki bez / bo wtedy lastIndexOf zwraca -1.

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

Proste regex, które ja testowałem:

\w+(.)\w+$ 

Oto dobrym miejscu można przetestować go na: http://rubular.com/

Powiązane problemy