所以我终于把学习正则表达式变成了一件事情。通常在使用正则表达式时,需要用“\”转义分隔符(如“/”)。但是当我在 Nginx 中使用正则表达式时,似乎“/”被视为字面意思而不是分隔符。
Nginx 使用 PCRE 引擎来评估正则表达式,所以对我来说,你可以只抛出一个未转义的分隔符而没有任何后果,这对我来说毫无意义。
例如,下面的正则表达式允许单个 IP 地址并拒绝所有其他地址:
location ~ /\.serverfault {
allow 1.2.3.4;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
但我认为它需要像这样才能正常工作:
location ~ \/\.serverfault {
allow 1.2.3.4;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
Mic*_*ton 13
你没有逃跑的原因/
是,/
是不是一个分隔符。
听起来您习惯于在其他需要分隔符的应用程序中编写正则表达式。例如,在 Perl 中,您可能会编写如下内容:
m/\/.serverfault/
Run Code Online (Sandbox Code Playgroud)
这里的关键是您选择了分隔符。没有什么特别之处/
。事实上,您几乎可以使用任何字符。#
也相当普遍。
m#/.serverfault#
Run Code Online (Sandbox Code Playgroud)
如果您选择特定的分隔符,并且该字符出现在正则表达式中,则必须对其进行转义,或者选择不同的分隔符。
因为 nginx 不需要对正则表达式匹配执行替换操作的能力,(例如s/old/new/
)它也不需要使用分隔符,因此当你在 nginx 中指定正则表达式时,不使用分隔符,并且(几乎)什么都不需要被逃脱。
归档时间: |
|
查看次数: |
5650 次 |
最近记录: |