Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php通过关联替换文件扩展名_Php_Regex_Preg Replace - Fatal编程技术网

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

php通过关联替换文件扩展名,php,regex,preg-replace,Php,Regex,Preg Replace,我已经设置了一个preg_replace,将.gz文件扩展名添加到图像文件名中。但是我需要关联地更改文件扩展名(以便bmp->bmp.gz、png->png.gz等)。我可以用什么来代替$old_扩展变量来实现这一点 $new_file_ext = preg_replace('"\.(bmp|gif|png|jpg|jpeg)$"', '.' . $old_extension . '.gz', $filename ); 您需要反向引用组索引1中的字符。捕获组具有捕获所有角色的性质,这些角色由

我已经设置了一个preg_replace,将.gz文件扩展名添加到图像文件名中。但是我需要关联地更改文件扩展名(以便bmp->bmp.gz、png->png.gz等)。我可以用什么来代替$old_扩展变量来实现这一点

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

您需要反向引用组索引1中的字符。捕获组具有捕获所有角色的性质,这些角色由这些组中存在的模式匹配。因此,在这里,捕获组中显示的模式是
bmp | gif | png | jpg | jpeg
。在替换部分中,我们可以通过指定组中的索引号(如
\1
(指第一个捕获组))来引用这些字符

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

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


编辑: 为确保更换了分机,请按常规操作

  • $ext=explode('.',$filename)
  • $ext[key(end($ext))]=strtr($ext[key(end($ext))],$trans)仅翻译扩展名
  • 内爆返回
    返回连接(“”,$ext)

    为什么不简单地将扩展附加到它

    $new = $old.".gz";
    

    非常感谢。这正是我需要的。还请欣赏regex101.com上的演示。我以前没见过。
    $new = $old.".gz";