nginx location regex - character class and range of matches

nginx, pcre, regex

Solution

If you want to capture 4 to 6 characters, why you don't have put the quantifier inside the capture parenthesis?

Something like that perhaps:

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

Curly braces are used both in regex and for block control, you must enclose your regex with quotes (single or double) (<-- wiki nginx)

Problem

I am trying to setup a regex for the path `/s/<4-6 character string here>` where I capture the 4-6 character string as $1. I tried using the following two entries, but both fail ``` location ~ ^/s/([0-9a-zA-Z]){4,6}+$ { ... location ~ ^/s/([0-9a-zA-Z]{4,6})+$ { ... ``` The first one comes up with 'unknown directive' and the second comes up with 'pcre_compile() failed: missing )' EDIT The following routes would be served by this location: ``` /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) ``` The following routes would NOT be served by this location: ``` /s/1 /s/12 /s/123 /s/a /s/ab /s/abc /s/abc1234 /s/12345678 ``` etc...

Original source