为什么Nginx正则表达式中不需要转义“/”?

为什么Nginx正则表达式中不需要转义“/”?

所以我决定最终学习正则表达式。通常,使用正则表达式时,需要用“\”转义分隔符(如“/”)。但是当我在 Nginx 中使用正则表达式时,似乎“/”被按字面意义处理,而不是作为分隔符。

Nginx 使用 PCRE 引擎来评估正则表达式,因此对我来说,直接插入未转义的分隔符而不产生任何后果是没有意义的。

举例来说,以下正则表达式允许单个 IP 地址并拒绝所有其他 IP 地址:

location ~ /\.serverfault {
    allow 1.2.3.4;
    deny all;
}

但我认为它需要像这样才能正常工作:

location ~ \/\.serverfault {
    allow 1.2.3.4;
    deny all;
}

我在这里遗漏了什么?

答案1

你不必逃跑的原因//不是分隔符。

听起来您习惯于在其他应用程序中编写正则表达式,在这些应用程序中需要使用分隔符。例如,在 Perl 中,您可能会编写如下内容:

m/\/.serverfault/

关键在于你选择了分隔符。 没有什么特别的/。事实上,您可以使用几乎任何字符。#也相当常见。

m#/.serverfault#

如果你选择特定的分隔符,并且该字符出现在正则表达式中,则必须对其进行转义,或选择不同的分隔符

因为 nginx 不需要对正则表达式匹配执行替换操作的能力,(例如s/old/new/)它也不需要使用分隔符,因此当您在 nginx 中指定正则表达式时,不使用分隔符,并且(几乎)不需要转义任何内容。

相关内容