首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nginx regex:检测是否存在分隔符

nginx regex:检测是否存在分隔符
EN

Stack Overflow用户
提问于 2014-03-04 18:48:07
回答 3查看 463关注 0票数 0

我有一个字符串,它看起来像以下任何一个:

代码语言:javascript
运行
复制
1) /tag/example/123
2) /tag/example/123/
3) /tag/example/123/1v1
4) /tag/example/123/1v1/yes/no/maybe

我正在用nginx重写这个字符串,如下所示:

代码语言:javascript
运行
复制
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之后不存在。

产出:

代码语言:javascript
运行
复制
1) Aborts
2) $1 = 123, $2 = NULL
3) $1 = 123, $2 = 1v1
4) $1 = 123, $2 = 1v1/yes/no/maybe

我怎样才能让它对所有的字符串都有效呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-04 19:30:27

你试过像这样吗?

代码语言:javascript
运行
复制
rewrite ^/tag/example/(\d*)/?(.*) /example/$1/$2;
票数 0
EN

Stack Overflow用户

发布于 2014-03-04 19:16:07

我不确定这是否转换为nginx,但是对于Perl正则表达式,您需要使用如下所示的非捕获括号:

代码语言:javascript
运行
复制
s^(?:/tag)?(?:/example)((((/\d*)(/)?)(1v1)?)(/yes/no/maybe)?)^example/$1$2$3$4^g 

恐怕我用了“^”来代替/保持答案的直截了当--我不能说是否可以在nginx中使用该替换,但我认为regex是有效的。

票数 0
EN

Stack Overflow用户

发布于 2014-03-04 19:51:29

我认为您解决了您的问题,但如果其他人不太可能看到如何修改代码以允许斜杠之间的任何字母数字字符组合,我认为这应该是好的:

代码语言:javascript
运行
复制
s^(?:/tag)?(?:/example)((((/\d*)(/)?)(\w+?)?)(/w+?/w+?/w+?)?)^example/$1$2$3$4^g 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22180373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档