用于nginx路由匹配的正则表达式

时间:2016-12-20 10:49:55

标签: regex nginx

我正在尝试匹配以下路线:

/{anything1}/{anything2}/file.{jpg|png}

其中anything1可以是[a-z0-9](小写字母和数字),anything2可以是[-a-z0-9](小写字母,数字和短划线)。

我不想匹配所有文件的原因如下:

location ~* (.+)\.(jpg|png)$

我需要在$anything1块中提供$anything2location个变量,以便稍后我可以重写。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用像

这样的正则表达式
^/[^/]+/[^/]+/[^/]+\.(?:jpg|png)$

请参阅regex demo

[^/]+匹配除/以外的1个字符,因此不能在/分隔符上溢出,并确保只匹配具有一定数量子路径的路径。

必须转义点,因此使用\.

(?:jpg|png)更改组,匹配2个序列,jpgpng

如果您确实只想允许特定字符(白名单方法),则需要使用量词(我认为您需要+一次或多次出现< / em>)使用任何部分的角色类:

^/[a-z0-9]+/[a-z0-9-]+/[^/]*\.(?:png|jpg)$