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

Как я вставил бы "_thumb" в файлы, которые динамично сгенерированы.

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

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

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

25
задан st4ck0v3rfl0w 12 March 2010 в 00:10
поделиться

6 ответов

Нет необходимости использовать 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);
41
ответ дан 28 November 2019 в 18:15
поделиться

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

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

$info = pathinfo( $file );
$no_extension =  basename( $file, '.'.$info['extension'] );
echo $no_extension.'_thumb.'.$info['extension']
4
ответ дан 28 November 2019 в 18:15
поделиться

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

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

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

$filename = substr_replace($filename, '_thumb', -4, 0);
2
ответ дан 28 November 2019 в 18:15
поделиться

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

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

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

15
ответ дан 28 November 2019 в 18:15
поделиться
 preg_replace("/(\w+)\.(\w+)/","'\\1_thumb.\\2'","test.jpg"); 

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

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

3
ответ дан 28 November 2019 в 18:15
поделиться
$str = "ch-1268312613-photo.jpg";
print preg_replace("/\.jpg$/i","_thumb.jpg",$str);
1
ответ дан 28 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: