Nginx位置的正则表达式,是否需要转义正斜杠?

int*_*ika 10 regex nginx regex-group nginx-location nginx-config

Nginx 使用 PCRE 引擎来评估正则表达式,文档指出不使用分隔符,因此我们不必像在标准正则表达式中那样/转义 URI 中的正斜杠。/有效的 nginx 正则表达式的示例是location ~* /myapp/.+\\.php$

\n\n

以下代码转义了正斜杠

\n\n

location ~ ^\\/(?:index|core\\/ajax\\/update|ocs\\/v2|ocm-provider\\/.+)\\.php(?:$|\\/)

\n\n

在这种情况下到底意味着什么\\/?当文档另有说明时为什么需要它?

\n

int*_*ika 6

虽然 Nginx 不需要转义正斜杠,/但它也不否认转义它,就像我们可以转义任何其他字符一样。

正则表达式特殊字符的第一个目的\是转义下一个字符,因此 nginx 只是翻译/匹配,就像它会翻译/匹配文字\/一样(这个例子没有任何目的,至少匹配文字)。/\jj\jj

在 nginx 上下文中转义正斜杠的目的之一可能是为了代码可移植性。

请注意,\后跟的字符可能与仅转义后跟的字符具有不同的含义,完整列表可在此处找到

资料来源:@monkeyzeus 和 @richard-smith 评论

  • 那是行不通的。`\a` 和 `\x` 在正则表达式中具有特定含义。不过,“\j”和“\/”都是安全的,分别代表“j”和“/”。 (3认同)