nginx httpMapModule 正则表达式变量

Rob*_*low 2 nginx regex regular-expressions

HttpMapModule文件指出:

从 1.0.4 开始,可以通过在模式前加上 ~* 来使用不区分大小写的正则表达式。

并举例:

map $uri $myvalue {
    /aa                   /mapped_aa;
    ~^/aa/(?<suffix>.*)$  $suffix;
}
Run Code Online (Sandbox Code Playgroud)

我更新为nginx/1.2.7使用它,并且天真的正则表达式可以正常工作,但变量却不能。当我尝试上述语法时,出现错误:

nginx: [emerg] pcre_compile() failed: unrecognized character after (?< in "^/aa/(?<suffix>.*)$" at "suffix>.*)$"
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下语法,但都没有奏效:

~^(.*)$  $1;
~^(.*)$  \1;
Run Code Online (Sandbox Code Playgroud)

但他们都没有工作。

有谁知道如何让变量在 HttpMapModule 中的正则表达式中工作?

nic*_*rim 9

(?P<name>pattern)是命名捕获组的标准 PCRE 语法 - 文档缺少P.

维基百科上“命名子模式”部分指出,(?<name>...)并且(?'name'...)对 PCRE 7.0 及以上版本有效;大概您的 nginx 版本与早期版本的 PCRE 相关联。