У меня есть список таких 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-)(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.+)?

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

Любая помощь очень ценится !!

2
user12928 12 Сен 2018 в 00:07

1 ответ

Лучший ответ

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

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

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

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

Пожалуйста, смотрите объяснение по ссылке.

3
The Scientific Method 11 Сен 2018 в 21:49