@Dentosx

Как исправить регулярку, чтобы искало последнее вхождение данных расширений?

Есть код
Код
if (stripos($uri, 'admin') === false) {
           	if (isset($_SERVER['HTTP_ACCEPT']) && isset($_SERVER['HTTP_USER_AGENT'])) {
           		if( strpos( $_SERVER['HTTP_ACCEPT'], 'image/webp' ) !== false ) {
           			$re = '/(cache)(.*)(\.jpg|\.png|.jpeg)/U';
           			$subst = '$1webp$2.webp';
           			$this->output = preg_replace($re, $subst, $this->output);
           		}
           	}
          }

Регулярка :
$re = '/(cache)(.*)(\.jpg|\.png|.jpeg)/U';
Суть проблемы: код заменяет пути картинок на .webp, если браузер клиента их поддерживает. Регулярка работает со всеми "нормальными картинками", но если путь картинки имеет такой вид :
/cache/folder1/tester/kartinka.png-270x270.jpeg
На клиенте отдаётся
/cache/folder1/tester/kartinka.webp-270x270.jpeg
Нужно, чтобы отдавалась картинка созданная в папке кеша:
/cache/folder1/tester/kartinka.png-270x270.webp
С картинками, которые имеют "нормальный путь", всё отлично работает.
Пробовал так:
$re = '/(cache)(.*)(\.jpg\z|\.png\z|.jpeg\z)/U';
После этого перестаёт работать замена со всеми картинками.
Подскажите решение, пожалуйста.
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
@dodo512
$re = '/(cache)([^\s\'"]+)\.(png|jpe?g)/';
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
https://regex101.com/r/0PjRXY/1/
На regex101 всё корректно срабатывает , в предпоследней подгруппе - путь и имя файла, в последней - расширение (крайнее справа). В чём проблема заменять последнюю подгруппу ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы