如何将“_thumb”插入到动态生成的文件中。
例如,我有一个允许用户上传图片的网站。该脚本获取图像,对其进行优化并保存到文件中。如何为优化图像插入字符串“_thumb”?
我目前正在保存1个版本的otpimized文件。 CH-1268312613-photo.jpg
我想将原始文件保存为上面的字符串,但想要追加“_thumb”,如下面的字符串 CH-1268312613-photo_thumb.jpg
答案 0 :(得分:40)
无需使用正则表达式。这样就可以了:
$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);
答案 1 :(得分:14)
不是采用正则表达式路由(或其他粗略的字符串操作),也许一些与文件名相关的函数可能更容易使用:即pathinfo(获取文件扩展名)和basename(获取文件名减去扩展名)。
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$thumb = basename($filename, ".$ext") . '_thumb.' . $ext;
编辑:@tanascius对于非常相似的答案感到抱歉,我猜我应该在写这篇文章时检查一下这个小弹出窗口(花了一段时间,我分心了)。
答案 2 :(得分:4)
您为什么要使用RegEx?扩展程序是否总是.jpg
并且只有一个扩展名吗?也许你可以用_thumb.jpg
替换它?
如果不是那么简单,你可以使用像pathinfo这样的函数来提取basename +扩展并在那里进行替换。这也没有正则表达式,这可能有点矫枉过正:
$info = pathinfo( $file );
$no_extension = basename( $file, '.'.$info['extension'] );
echo $no_extension.'_thumb.'.$info['extension']
答案 3 :(得分:2)
preg_replace("/(\w+)\.(\w+)/","'\\1_thumb.\\2'","test.jpg");
我认为使用regexp速度更快,效果更好 灵活性。
但我承认Chad的解决方案优雅而有效
答案 4 :(得分:2)
假设您在字符串中只出现一次“.jpg”,则可以执行str_replace
而不是正则表达式
$filename = str_replace(".jpg", "_thumb.jpg", $filename);
甚至更好,substr_replace
只是将字符串插入中间的某个位置:
$filename = substr_replace($filename, '_thumb', -4, 0);
答案 5 :(得分:1)
$str = "ch-1268312613-photo.jpg";
print preg_replace("/\.jpg$/i","_thumb.jpg",$str);