У меня есть список таких 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)(.+)?
Но похоже, что это не прерывает весь матч ...
Любая помощь очень ценится !!
1 ответ
Вы можете попробовать это
(?!.+-front)
Negative Lookahead, утверждает, что URL не содержит front
^(?!.+-front)(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?)
Пожалуйста, смотрите объяснение по ссылке.
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки строк, разбора и преобразования. Укажите язык (PHP, Python и т. д.) или инструмент (grep, VS Code, Google Analytics и т. д.), который вы используете. Не размещайте вопросы, требующие объяснения того, что означает символ или чему будет соответствовать конкретное регулярное выражение.
(?!.+-front)
- это отрицательный просмотр вперед и проверяет, существовало лиfront
слово. я использую отрицательный просмотр вперед, потому что они поддерживают квантификаторы, а отрицательный просмотр вперед - нет.