我有一个像这样的网址列表:
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}$1-screen-repair$5 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)
负向预测,断言 url 不包含 front
^(?!.+-front)(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?)
请参阅链接上的说明。
关于nginx 中的正则表达式先行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284231/