2013-04-23 126 views
6

我想設置路徑/s/<4-6 character string here>的正則表達式,其中我將4-6字符字符串捕獲爲$ 1。nginx位置正則表達式 - 字符類和匹配範圍

我試着用以下兩個條目,但都失敗

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

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

與「未知的指令」第一個出現和第二齣現與「pcre_compile()失敗:缺少)」

編輯

以下航線將由該位置服務:

/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) 

下面的路線不會受到此位置服務:

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

等等

回答

22

如果你想捕捉4到6個字符,你爲什麼不已經把量詞內捕獲括號?

類似的東西可能:( - 維基nginx的<)

+0

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

花括號都在正則表達式和塊控制使用時,必須用引號(單人或雙人),附上您的正則表達式我想要捕獲和限制字符串爲4-6個字符。您在第一個4-6之後擁有無限個字符,使用'。*' – Dave 2013-04-23 19:01:58

+0

@Dave:您的請求不明確。請給出一個你想要治療的url的具體例子。 – 2013-04-23 19:33:13

+0

我認爲我的要求很明確。我想從'/ s/1234'或'abcde'從'/ s/abcde'中捕獲'1234',除了4,5或6個字符串之外,不允許'/ s /'之後的任何內容。因此'/ s/x'或'/ s/xy'或'/ s/xyz'或'/ s/abcdxyz'將不會由此位置塊提供服務。 – Dave 2013-04-23 19:39:44