2015-03-25 83 views
-1

我已經設置了一個preg_replace來爲圖像文件名添加一個.gz文件擴展名。但是我需要關聯地更改文件擴展名(以便bmp - > bmp.gz,png - > png.gz等)。我可以用什麼來代替$ old_extension變量來做到這一點?php通過關聯替換文件擴展名

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

回答

1

您需要背refrence本組索引1.捕獲組具有捕獲人其通過本的那些基團內的圖案匹配的字符的性質內的字符。所以這裏捕獲組內的模式是bmp|gif|png|jpg|jpeg。在替換部分,我們可以通過指定它的索引號,如\1(它指的是第一個捕獲組)來引用那些存在於組中的字符。

preg_replace('~\.(bmp|gif|png|jpg|jpeg)$~', '.\1.gz', $filename); 

DEMO

+1

謝謝!這正是我需要的。也欣賞regex101.com上的演示。以前沒見過。 – chowwy 2015-03-25 00:59:27

0

更好的方法是strtr功能,它需要一個assoc命令陣列,像這樣:

<?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);
1

你爲什麼不直接附加擴展名呢?

$new = $old.".gz"; 
+0

omg,這是答案! – animaacija 2015-03-25 00:58:46