2013-04-23 4 views
6

Próbuję skonfigurować wyrażenie regularne dla ścieżki /s/<4-6 character string here>, w której przechwytuję ciąg 4-6 znaków jako 1 $.regex lokalizacji nginx - klasa znaków i zakres dopasowań

Próbowałem stosując następujące dwa wpisy, ale obie nie

location ~ ^/s/([0-9a-zA-Z]){4,6}+$ { ... 

location ~ ^/s/([0-9a-zA-Z]{4,6})+$ { ... 

Pierwszy z nich pochodzi z „nieznanego dyrektywy”, a drugi pochodzi z „pcre_compile() failed: brak)”

EDIT

następujących trasach będzie serwowana przez tego miejsca:

/s/1234 (and I would capture '1234' in $1) 
/s/12345 (and I would capture '12345' in $1) 
/s/123456 (and I would capture '123456' in $1) 
/s/abcd (and I would capture 'abcd' in $1) 
/s/abcde (and I would capture 'abcde' in $1) 
/s/abcdef (and I would capture 'abcdef' in $1) 
/s/a1b2c (and I would capture 'a1b2c' in $1) 

następujące trasy nie będzie serwowana przez tego miejsca:

/s/1 
/s/12 
/s/123 
/s/a 
/s/ab 
/s/abc 
/s/abc1234 
/s/12345678 

etc ...

Odpowiedz

22

Jeśli chcesz uchwycić 4 do 6 znaków, dlaczego nie wprowadziły kwantyfikatora wewnątrz uchwycić nawias?

Coś takiego może:

location ~ "^/s/([0-9a-zA-Z]{4,6})$" {... 

Curly szelki są wykorzystywane zarówno w regex i do sterowania grupowego, należy załączyć regex z cytatami (pojedyncze lub podwójne) (< - nginx wiki)

+0

Chcę zarówno przechwytywać i ograniczać ciąg znaków do 4-6 znaków. Masz nieograniczoną liczbę znaków po pierwszym 4-6 z ". *" – Dave

+0

@Dave: Twoje zapytanie nie jest jasne. Podaj konkretny przykład adresu URL, który chcesz potraktować. –

+0

Myślę, że moja prośba jest całkiem jasna. Chcę przechwycić "1234" z "/ s/1234" lub "abcde" z "/ s/abcde" i NIE zezwalać na cokolwiek następującego po "/ s /" oprócz 4, 5 lub 6 znaków. Tak więc "/ s/x" lub "/ s/xy" lub "/ s/xyz" lub "/ s/abcdxyz" nie będą obsługiwane przez ten blok lokalizacji. – Dave