nginx location regex - 字符类和匹配范围

Dav*_*ave 7 regex pcre nginx

我正在尝试为/s/<4-6 character string here>我捕获4-6字符串$ 1 的路径设置正则表达式.

我尝试使用以下两个条目,但都失败了

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

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

第一个出现'未知指令',第二个出现'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)
Run Code Online (Sandbox Code Playgroud)

此位置不提供以下路线:

/s/1
/s/12
/s/123
/s/a
/s/ab
/s/abc
/s/abc1234
/s/12345678
Run Code Online (Sandbox Code Playgroud)

等等...

Cas*_*yte 29

如果你想捕获4到6个字符,为什么你没有把量词放在捕获括号内?

也许这样的事情:

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

在正则表达式和块控件中都使用了大括号,你必须用引号括起你的正则表达式(单引号或双引号)(< - wiki nginx)

  • "未知指令"4,6} $'返回^/s /([0-9a-zA-Z]){4,6} $和'pcre_compile()失败:缺少)"^/s /([ 0-9a-zA-Z]'为^/s /([0-9a-zA-Z] {4,6})$ (3认同)
  • 好!这是因为花括号.你必须将你的正则表达式括在引号之间" (3认同)