HttpMapModuleドキュメント は次のように述べています。
1.0.4以降、パターンの前に〜*を付けることで、大文字と小文字を区別しない正規表現を使用できます。
そして例を挙げます:
map $uri $myvalue {
/aa /mapped_aa;
~^/aa/(?<suffix>.*)$ $suffix;
}
これを利用するためにnginx/1.2.7
に更新しました。ナイーブな正規表現は問題なく機能しますが、変数は機能しません。上記の構文を試してみると、エラーが発生します。
nginx: [emerg] pcre_compile() failed: unrecognized character after (?< in "^/aa/(?<suffix>.*)$" at "suffix>.*)$"
次の構文も試しましたが、どれも機能しませんでした。
~^(.*)$ $1;
~^(.*)$ \1;
しかし、どちらも機能しませんでした。
HttpMapModuleの正規表現で変数を機能させる方法を知っている人はいますか?
(?P<name>pattern)
は、名前付きキャプチャグループの標準のPCRE構文です。ドキュメントにはP
がありません。
ウィキペディアの「名前付きサブパターン」セクション は(?<name>...)
および(?'name'...)
PCRE7.0以降で有効です。おそらく、あなたのバージョンのnginxは以前のバージョンのPCREに対してリンクされています。