我有一个字符串,它看起来像以下任何一个:
1) /tag/example/123
2) /tag/example/123/
3) /tag/example/123/1v1
4) /tag/example/123/1v1/yes/no/maybe我正在用nginx重写这个字符串,如下所示:
rewrite ^/tag/example/(\d*)/(.*) /example/$1/$2;对于字符串1,$uri最终需要看起来类似于/example/123 )。(字符串3的示例/123/1v1)。等等..。
有了这个重写,我需要$1是123,$2是字符串的其余部分。如果123 (字符串1)之后没有任何内容,我需要$2才能简单地为null。此正则表达式适用于2)、3)和4),但不适用于1)。1)使重写中止,因为/在123之后不存在。
产出:
1) Aborts
2) $1 = 123, $2 = NULL
3) $1 = 123, $2 = 1v1
4) $1 = 123, $2 = 1v1/yes/no/maybe我怎样才能让它对所有的字符串都有效呢?
发布于 2014-03-04 19:30:27
你试过像这样吗?
rewrite ^/tag/example/(\d*)/?(.*) /example/$1/$2;发布于 2014-03-04 19:16:07
我不确定这是否转换为nginx,但是对于Perl正则表达式,您需要使用如下所示的非捕获括号:
s^(?:/tag)?(?:/example)((((/\d*)(/)?)(1v1)?)(/yes/no/maybe)?)^example/$1$2$3$4^g 恐怕我用了“^”来代替/保持答案的直截了当--我不能说是否可以在nginx中使用该替换,但我认为regex是有效的。
发布于 2014-03-04 19:51:29
我认为您解决了您的问题,但如果其他人不太可能看到如何修改代码以允许斜杠之间的任何字母数字字符组合,我认为这应该是好的:
s^(?:/tag)?(?:/example)((((/\d*)(/)?)(\w+?)?)(/w+?/w+?/w+?)?)^example/$1$2$3$4^g https://stackoverflow.com/questions/22180373
复制相似问题