php 通过关联替换文件扩展名

php replace file extension by association

我已经设置 preg_replace 来为图像文件名添加 .gz 文件扩展名。但是我需要关联地更改文件扩展名(以便 bmp -> bmp.gz、png -> png.gz 等)。我可以用什么代替 $old_extension 变量来执行此操作?

$new_file_ext = 
preg_replace('"\.(bmp|gif|png|jpg|jpeg)$"', '.' . $old_extension . '.gz', $filename );

您需要反向引用组索引 1 中存在的字符。捕获组具有捕获与这些组中存在的模式匹配的所有字符的性质。所以这里捕获组中存在的模式是 bmp|gif|png|jpg|jpeg。在替换部分,我们可以通过指定它的索引号来引用组中存在的那些字符,例如 </code> (指的是第一个捕获组)。</p> <pre><code>preg_replace('~\.(bmp|gif|png|jpg|jpeg)$~', '..gz', $filename );

DEMO

更好的方法是 strtr 函数,它需要一个关联数组,如下所示:

<?php    
$trans = array("bpm" => "bpm.gz","jpg" => "jpg.gz");
echo strtr($filename, $trans);
?>

编辑: 确保替换扩展名,执行通常的操作

  1. $ext = explode('.',$filename) explode
  2. $ext[key(end($ext))] = strtr($ext[key(end($ext))], $trans); 只翻译扩展名
  3. 内爆回来return join('',$ext);

为什么不简单地附加扩展名呢?

$new = $old.".gz";