regex lookahead проблемы в nginx - PullRequest
       34

regex lookahead проблемы в nginx

0 голосов
/ 12 сентября 2018

У меня есть список 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}$1-screen-repair$5 last;

Проблема в том, что существуют также URL, подобные этому:

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

на котором мы НЕ хотим, чтобы произошли какие-либо изменения.

Поэтому я бился головой о клавиатуру, пытаясь понять, как получить взгляд назад, чтобы прервать ВСЁ совпадение, если появляется слово «front».

Я пробовал это

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

но, похоже, не прерывается весь матч ...

любая помощь действительно ценится!

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете попробовать это

(?!.+-front) Negative Lookahead утверждает, что URL не содержит front

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

Попробуйте демо здесь

см. Пояснение по ссылке.

...