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

标签 regex nginx negative-lookbehind

我有一个像这样的网址列表:

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)(.*?)

Try demo here

请参阅链接上的说明。

关于nginx 中的正则表达式先行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52284231/

相关文章:

c# - 正则表达式得到一个字符后面没有数字

regex - 设计 NFA 时如何直观思考

Docker 映射端口并暴露给特定主机

php - php 中的负后视和贪婪量词

javascript - JavaScript 中的正则表达式负后视替换

python - 将列表中的字符串转换为原始字符串以供重新搜索

java - 正则表达式捕获组混淆

python - uWSGI服务器日志……读取文件的权限被拒绝……哪个文件?

templates - 如何使用ansible循环包含模板变量的数组?

javascript - 正则表达式匹配 domain.com 但不匹配 @domain.com