nginx 中的正则表达式先行问题

regex lookahead problems in nginx

我有一个这样的 url 列表:

iphone-repair/iphone-4s-repair/iphone-4s-lcd-repair
iphone-repair/iphone-4s-repair/iphone-4s-glass-repair
iphone-repair/iphone-4s-repair/iphone-4s-glass-amp-lcd-replacement

我想这样重写它们:

iphone-repair/iphone-4s-repair/iphone-4s-screen-repair

我是这样工作的:

rewrite ^(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?)  https://${server_name}-screen-repair last;

问题是还有这样的网址:

iphone-repair/iphone-4s-repair/iphone-4s-front-glass-amp-lcd-amp-back-glass-replacement

我们希望发生任何重写。

所以我一直在用头敲击键盘,试图了解如何在 "front" 出现时中止整个匹配。

我试过了

^(.*?)-(?<!front-)(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.+)?

但它似乎并没有中止整个比赛...

非常感谢任何帮助!!

你可以试试这个

(?!.+-front) Negative Lookahead,断言 url 不包含 front

^(?!.+-front)(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?)

Try demo here

请看link上的解释。