$config['file_name'] = preg_replace('/(\.gif|\.jpg|\.png)/', '_thumb$1', $filename);
基本上我想要filename.jpg
变成filename_thumb.jpg
我不明白为什么扩展名会重复两次。(filename.jpg.jpg)。
编辑这是有效的,我的代码有其他问题。
最好的方法可能是...
$filename_ext = pathinfo($filename, PATHINFO_EXTENSION);
$filename = preg_replace('/^(.*)\.' . $filename_ext . '$/', '$1_thumb.' . $filename_ext, $filename);
我刚测试了一下,使用$filename = 'path/to/something.jpg';
,输出结果是path/to/something_thumb.jpg
。
我说这是最好的方法,因为通常使用PHP内置的函数更好。这还允许处理PHP可以处理的所有文件扩展名(因为它是字符串分割,应该都可以处理)。
foo.tar.gz
,那么为什么 gz
不正确?它不是一个被压缩的文件吗? - salathe应该能正常工作。
echo preg_replace('/(\.gif|\.jpg|\.png)/', '_thumb$1', "filename.jpg");
提供filename_thumb.jpg
。
无论如何,使用表达式'/(\.gif|\.jpg|\.png)$/'
(最好不要使用括号,并将$1替换为$0),这样只有在字符串位于末尾时才匹配它。
(?:)
。真的没有必要使用捕获组。 - Artefactopathinfo
和basename
。这将处理所有类型的文件,包括没有扩展名的文件。原始答案:最初的回答。$extension = pathinfo($filename, PATHINFO_EXTENSION);
$baseName = basename($filename, ".{$extension}");
$newName = "{$baseName}_thumb.{$extension}";
最短 & 最快
$img = '/path/to/picture.jpg';
$thumb = substr_replace( $img, '_thumb.', strrpos($img, '.'), 1);
echo $thumb;
// /path/to/picture_thumb.jpg
preg_replace('/(?=\.)/', '_thumb', $filename, 1);
我觉得看起来不错。 - mickmackusa