2012-01-18 16 views
8

Sto cercando di abbinare: Regex partita per finale opzionale taglio su

/app 
/app/ 
/app/** 

ma non:

/app** 

la barra finale dovrebbe essere facoltativo. Non riesco a farlo funzionare.

^/app/([^/]*)/? corrisponde a /app/ e /app/**, ma non a /app.

+0

'**': qualsiasi percorso come in '/ app/**' 'potrebbe essere/app/a/path/to/something'? Oppure "**" letteralmente? – lkuty

+0

sì, qualsiasi percorso dovrebbe corrispondere (come il tuo esempio di/app/a/percorso/a/qualcosa). c'è una sorta di regex che dice "o finisci qui o hai questo personaggio (/) e qualsiasi altra cosa." Ho provato a terminare con in o ma non ha funzionato, – MoatMonster

risposta

7

Prova questo:

^\/app((\/\w+)+|\/?)$ 
+0

che è molto vicino! ma dal momento che combina solo caratteri di parole,/app/qualunque/altro/percorso non corrisponde. vedo dove stai andando, però. lavorerò con quello e vedrò che cosa posso inventare. Grazie! – MoatMonster

+6

In tal caso, prova qualcosa di più semplice come "# ^/app (/.*)?$#" – cmbuckley

+1

wow. questo è stato totalmente di fronte alla mia faccia per tutto il tempo. grazie mille, @ cbuckley! – MoatMonster

5

Ciò funzionerà:

^/app(/[^/]*)? 

edit: Questo funziona anche:

^/app(/.*)? 
+0

grazie, ma continuerà a corrispondere/app ** – MoatMonster

+1

no, non lo sarà, a causa della barra iniziale nella parte opzionale –

+0

Ma non consentirà/app/foo/bar. – cmbuckley

0

Hai provato questo:

^/app(/[^/]+)*/? 

I'not sicuro circa l'** - Cosa, ma puoi davvero aver bisogno di qualcosa del genere ???

^/app/?(/[^/]+)*/?$ 
+0

grazie ma che corrisponderà ancora/app **. Voglio abbinare esattamente/app,/app /, o/app/qualsiasi cosa **. sto lottando per fingere l'espressione regolare che dice "qui devi avere un/o la fine". – MoatMonster

+0

Cos'è ** qui? Alcuni caratteri casuali o due * consecutivi? – Mithrandir

+0

qualsiasi carattere casuale. scusa per la mancanza di descrizione. – MoatMonster

0
^/(app1|app2)(?:/(.*))?$ 

partite tutte le sotto

/app1 o /app1/ o /app1/whatever
/app2 o /app2/ o /app2/whatever

^/app(?:/(.*))?$ 

corrisponderà
/app o /app/ o /app/whatever