2010-03-12 153 views
19

如何將「_thumb」插入到正在進行浮點生成的文件中。正則表達式 - 如何在文件擴展名之前插入字符串

例如,我有一個網站允許用戶上傳圖片。該腳本獲取圖像,優化並保存到文件。我將如何讓它插入字符串「_thumb」的優化圖像?

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

我想原來保存爲上面的字符串,但要附加 「_thumb」 之類的下列字符串 CH-1268312613-photo_thumb.jpg

回答

34

不需要使用正則表達式。這將做到這一點:

$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); 
+5

對於'.tar.gz'這樣的東西是不會的。 – Skyzer 2015-05-10 04:03:44

3

你爲什麼想要使用RegEx?擴展名是否總是.jpg,並且只有一個擴展名?也許你可以用_thumb.jpg替換它?

如果不那麼簡單,可以使用pathinfo這樣的函數來提取基本名稱+擴展名並在那裏進行替換。這也是沒有正則表達式,這可能在這裏矯枉過正:

$info = pathinfo($file); 
$no_extension = basename($file, '.'.$info['extension']); 
echo $no_extension.'_thumb.'.$info['extension'] 
1
$str = "ch-1268312613-photo.jpg"; 
print preg_replace("/\.jpg$/i","_thumb.jpg",$str); 
1
preg_replace("/(\w+)\.(\w+)/","'\\1_thumb.\\2'","test.jpg"); 

我覺得用一個正則表達式是更爲有效的速度,真正爲 靈活性更好。

但我承認乍得的解決方案是優雅,假設你只有「.JPG」的出現曾經在弦有效

+0

有一些事情是錯誤的。你沒有逃過這個模式的時期,所以這個模式可以匹配任何角色。另外,'\ w'不包含所有可能的文件名字符。 – 2010-03-12 00:21:34

+0

的確如此,因爲我沒有把它標記爲代碼。被解釋爲像。 又是真的,但文件系統有權使用任何字符,我敢打賭不 – Darkyo 2010-03-12 00:25:43

2

,你可以做一個str_replace代替正則表達式

$filename = str_replace(".jpg", "_thumb.jpg", $filename); 

甚至好,substr_replace剛剛插入字符串中間的某個位置:

$filename = substr_replace($filename, '_thumb', -4, 0); 
9

,而不是採取正則表達式的路由(或其他污物e字符串操作),也許一些文件名相關的函數可能更容易處理:即pathinfo(獲取文件擴展名)和basename(獲取文件名減去擴展名)。

$ext = pathinfo($filename, PATHINFO_EXTENSION); 
$thumb = basename($filename, ".$ext") . '_thumb.' . $ext; 

編輯:對於非常相似的答案@tanascius對不起,想我應該已經檢查了小彈出而寫這篇(過了好一會兒,我被分心)。

相關問題