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

st4*_*l0w 25 php regex

如何将"_thumb"插入到动态生成的文件中.

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

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

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

Cha*_*rch 41

不需要使用正则表达式.这样做:

$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);
Run Code Online (Sandbox Code Playgroud)

  • 不会出现`.tar.gz`这样的事情 (8认同)

sal*_*the 15

也许一些与文件名相关的函数可能更容易使用,而不是采用正则表达式路由(或其他粗略的字符串操作):即pathinfo(获取文件扩展名)和basename(获取文件名减去扩展名).

$ext   = pathinfo($filename, PATHINFO_EXTENSION);
$thumb = basename($filename, ".$ext") . '_thumb.' . $ext;
Run Code Online (Sandbox Code Playgroud)

编辑:@tanascius对于非常相似的答案抱歉,我猜我应该在写这篇文章时检查一下这个小弹出窗口(这需要一段时间,我分心了).


tan*_*ius 5

为什么要使用正则表达式?是否总是扩展.jpg并且只有一个扩展?也许你可以用它代替_thumb.jpg

如果不是那么简单,您可以使用类似pathinfo的函数来提取基本名称 + 扩展名并在那里进行替换。这也可以在没有正则表达式的情况下工作,这在这里可能有点矫枉过正:

$info = pathinfo( $file );
$no_extension =  basename( $file, '.'.$info['extension'] );
echo $no_extension.'_thumb.'.$info['extension']
Run Code Online (Sandbox Code Playgroud)