2010-02-16 11 views
8

quindi, ho una specie di URL interno: ad esempio "/img/pic/Image1.jpg" o "/pic/Image1.jpg" o semplicemente "Image1.jpg", e ho bisogno per abbinare questo "Image1.jpg" in altre parole voglio abbinare l'ultima sequenza di caratteri dopo/o se non ci sono/non solo sequenze di caratteri. Grazie in anticipo!Corrispondenza ultima parola dopo/

+0

espressione regolare è universale) ma è per javascript regex –

+3

espressioni regolari non sono universale, ci sono diversi gusti con diverse capacità. Ma questa espressione regolare di Perl farà il tuo compito: '^ (?:. * /) * (. *) $' –

+1

non hai bisogno di un'espressione regolare per questo.usa la tua lingua preferita, dividi su "/" e poi ottieni l'ultimo elemento. Molto più semplice della regex di crafting. – ghostdog74

risposta

11

.*/(.*) non funziona se non ci sono/s.

([^/]*)$ dovrebbe funzionare se ci sono o meno.

+0

Ma '[\ s \ S] */(. *)'. – Gumbo

2
.*/([^/]*) 

Il gruppo di acquisizione corrisponde all'ultima sequenza dopo /.

+0

Non corrisponde a 'Image1.jpg' –

1

La seguente espressione farebbe il trucco:.

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

O ancora più semplice (ma credo che questo è stato anche pubblicato qui di seguito prima di me)

([^/]+)$ 
0

Qualcosa di simile */(*. $ (i dettagli dipendono dal fatto che stiamo parlando di Perl, o qualche altro dialetto di espressioni regolari)

Primo. * corrisponde a tutto (comprese le barre). Poi c'è una barra, poi c'è. * Che corrisponde a tutto, da quella barra alla fine (che è $).

Il * funziona avidamente da sinistra a destra, il che significa che quando si hanno più barre, il primo * corrisponderà a tutti tranne l'ultimo.

+0

L'espressione regolare * richiede * barra, quindi' Image1.jpg' non corrisponde a –

1

In Ruby Si potrebbe scrivere

([^\/]*)$ 

Le espressioni regolari in Ruby sono abbastanza universale e si può provare a vivere qui: http://rubular.com/ A proposito: forse c'è altra soluzione che non comporta espressioni regolari? E.g File.basenam(path) (Ruby di nuovo)

Modifica: profjim lo ha pubblicato in precedenza.

1

Ho notato che hai detto nei tuoi commenti che stai usando javascript. Non hai davvero bisogno di una regex per questo e penso sempre che sia bello avere un'alternativa all'utilizzo di espressioni regolari.

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

In realtà non è necessario regexp per questo.

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

e funziona anche bene per le stringhe senza alcuna / perché allora lastIndexOf restituisce -1.

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

Una semplice espressione regolare che ho provato:

\w+(.)\w+$ 

Ecco un buon sito è possibile verificare su: http://rubular.com/

Problemi correlati