2016-11-17 40 views
0

我正在进行NGINX重写。如果存在,我想匹配,如果它不只是采取什么并将其设置为2美元。用于配置文件URL上的NGINX重写的正则表达式

rewrite ^/profile/(([a-zA-Z0-9_-]*-u)|(^\s*$))([0-9]+)$ /profile/$2/ redirect; 

这不是很正常,现在它会匹配/ a-u4 /但我希望它也匹配/ 4 /。

这是可能的正则表达式?

+0

'(^ \ s * $)'从不匹配(它匹配一个字符串的开始,0+空格,字符串的结尾 - 不可能匹配字符串中的这样的模式),您可以将其删除。尝试使用'^/profile /([a-zA-Z0-9 _-] * - u)?([0-9] +)$'替换为'/ profile/$ 1 /' –

+0

当我查阅它时,说这就是你如何匹配空白。 – Iscariot

+0

不,你不懂锚。删除'^'和'$',然后用'\ s *'匹配0+空格。 –

回答

0

是的,这是可能的。我从你想匹配的评论理解/型材/名称-U000 /或/型材/ 000/

此正则表达式将工作:

^/profile/([a-zA-Z0-9_-]+-u)?([0-9]+)/$ 

这使任何数字匹配(000份)和在到2美元。

制造的完整的规则:

rewrite ^/profile/([a-zA-Z0-9_-]+-u)?([0-9]+)/$ /profile/$2/ redirect; 

但不要用它!它只会创建一个重定向周期,如果这是你想要做的。但我需要......

澄清

我理解这可能需要调整到正是你想要什么,我不清楚你想捕捉到$ 2的东西。让我知道,我会更新我的答案。如果它只是您想要捕获的数字,那么您想要将/ 000000 /重定向到自身而无需更改,因此无需执行此操作,只需/ profile/Name-u000 /需要重定向。让我知道如果我错过了什么。

正则表达式的工作原理

^/profile/ 

匹配字符串后面/型材/开始。

([a-zA-Z0-9_-]+-u)? 

可选地匹配1个或多个字母,数字,下划线或破折号,后跟-u并将其捕获到1美元。括号后面的问号是什么使其成为可选项。请记住,第一部分(-u之前)甚至可以用下划线或破折号开始或结束,您可能会也可能不想要。

([0-9]+) 

匹配1个或更多数字并捕获到2美元。

/$ 

用字符串末尾的正斜杠结束匹配。

+0

不确定为什么答案已被标记。如果出现问题,我们将不胜感激。 – SuperDuperApps