Как я вставил бы "_thumb" в файлы, которые динамично сгенерированы.
Например, у меня есть сайт, который позволяет пользователям загружать изображение. Сценарий берет изображение, оптимизирует его и сохраняет в файл. Как я заставил бы его вставить строку "_thumb" для оптимизированного изображения?
Я в настоящее время сохраняю 1 версию otpimized файла. ch-1268312613-photo.jpg
Я хочу сохранить оригинал как вышеупомянутую строку, но хотеть добавить, "_thumb" как следующая строка ch-1268312613-photo_thumb.jpg
Нет необходимости использовать regex. Это будет сделано:
$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);
Почему вы хотите использовать RegEx? Всегда ли расширение .jpg
и только одно расширение? Может быть, вы можете заменить его на _thumb.jpg
?
Если это не так просто, вы можете использовать такую функцию, как pathinfo , чтобы извлечь базовое имя + расширение и выполнить замену там . Это также работает без регулярного выражения, что может быть здесь излишним:
$info = pathinfo( $file );
$no_extension = basename( $file, '.'.$info['extension'] );
echo $no_extension.'_thumb.'.$info['extension']
Предполагая, что у вас в строке есть только ".jpg", вы можете выполнить str_replace
вместо регулярного выражения
$filename = str_replace(".jpg", "_thumb.jpg", $filename);
или даже лучше, substr_replace
, чтобы просто вставить строку где-нибудь посередине:
$filename = substr_replace($filename, '_thumb', -4, 0);
Вместо того, чтобы использовать регулярные выражения (или другие грубые манипуляции со строками), возможно, с некоторыми функциями, связанными с именами файлов, было бы проще жить: а именно pathinfo (для получения расширения файла) и basename (для получения имени файла минус расширение).
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$thumb = basename($filename, ".$ext") . '_thumb.' . $ext;
Edit: @tanascius извините за очень похожий ответ, наверное, я должен был проверить всплывающее окно, пока писал это (это заняло некоторое время, я отвлекся).
preg_replace("/(\w+)\.(\w+)/","'\\1_thumb.\\2'","test.jpg");
Я думаю, что использование регулярного выражения намного эффективнее по скорости И действительно лучше для гибкости.
Но я признаю, что решение Чада элегантно и эффективно
$str = "ch-1268312613-photo.jpg";
print preg_replace("/\.jpg$/i","_thumb.jpg",$str);