RegEx – Как вставить строку перед расширением файла

Как бы вставить «_thumb» в файлы, которые создаются с помощью диаграммы.

Например, у меня есть сайт, который позволяет пользователям загружать изображение. Скрипт принимает изображение, оптимизирует его и сохраняет в файл. Как я могу вставить строку «_thumb» для оптимизированного изображения?

В настоящее время я сохраняю 1 версию файла otpimized. ч-1268312613-photo.jpg

Я хочу сохранить оригинал как вышеприведенную строку, но хочу добавить «_thumb», как следующую строку ch-1268312613-photo_thumb.jpg

Нет необходимости использовать регулярное выражение. Это сделает это:

$extension_pos = strrpos($filename, '.'); // find position of the last dot, so where the extension starts $thumb = substr($filename, 0, $extension_pos) . '_thumb' . substr($filename, $extension_pos); 

Вместо того, чтобы использовать маршрут регулярного выражения (или другие грубые манипуляции с строкой), возможно, с некоторыми функциями, связанными с именами файлов, может быть проще жить: а именно pathinfo (для получения расширения файла) и basename (чтобы получить имя файла minus extension).

 $ext = pathinfo($filename, PATHINFO_EXTENSION); $thumb = basename($filename, ".$ext") . '_thumb.' . $ext; 

Редактировать : @tanascius извините за очень похожий ответ, думаю, я должен был проверить небольшое всплывающее окно, написав это (это заняло некоторое время, я отвлекся).

Почему вы хотите использовать RegEx? Является ли расширение всегда .jpg и существует ли только одно расширение? Может быть, вы можете заменить его на _thumb.jpg ?

Если это не так просто, вы можете использовать такую ​​функцию, как pathinfo, для извлечения расширений basename + и замены там. Это работает без регулярного выражения, которое может быть излишним здесь:

 $info = pathinfo( $file ); $no_extension = basename( $file, '.'.$info['extension'] ); echo $no_extension.'_thumb.'.$info['extension'] 

Предполагая, что у вас есть только «.jpg» один раз в строке, вы можете сделать str_replace вместо regex

 $filename = str_replace(".jpg", "_thumb.jpg", $filename); 

или даже лучше, substr_replace просто вставить строку где-то посередине:

 $filename = substr_replace($filename, '_thumb', -4, 0); 
 $str = "ch-1268312613-photo.jpg"; print preg_replace("/\.jpg$/i","_thumb.jpg",$str); 
  preg_replace("/(\w+)\.(\w+)/","'\\1_thumb.\\2'","test.jpg"); 

Я думаю, что использование регулярного выражения намного более эффективно и эффективно для гибкости.

Но я признаю, что решение Чада элегантно и эффективно