RegEx - 如何在文件扩展名之前插入字符串

时间:2010-03-12 00:10:03

标签: php regex

如何将“_thumb”插入到动态生成的文件中。

例如,我有一个允许用户上传图片的网站。该脚本获取图像,对其进行优化并保存到文件中。如何为优化图像插入字符串“_thumb”?

我目前正在保存1个版本的otpimized文件。 CH-1268312613-photo.jpg

我想将原始文件保存为上面的字符串,但想要追加“_thumb”,如下面的字符串 CH-1268312613-photo_thumb.jpg

6 个答案:

答案 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);