2011-06-11 88 views
3

我想知道一種方法來刪除文件名中的所有小數,但最後一個。我需要保留最後一個,因爲擴展是這樣的。刪除所有小數,但最後

例:

abc.def.ghij-klmnop.q234.mp3 

這個文件看起來應該像

abcdefghij-klmnopq234.mp3 

有些功能擴展超過3字符長。

回答

11

您可以使用正則表達式以積極的前瞻。就像這樣:

$withdots = 'abc.def.ghij-klmnop.q234.mp3'; 
$nodots = preg_replace('/\.(?=.*\.)/', '', $withdots); 

執行上面後,$nodots將包含abcdefghij-klmnopq234.mp3。正則表達式基本上是說匹配所有的時期,然後是另一個時期。所以最後一段時間不匹配。我們用空字符串替換所有匹配,並且剩下所需的結果。

8

應該這樣做:

$file = 'abc.def.ghij-klmnop.q234.mp3'; 
$parts = pathinfo($file); 
$filename = str_replace('.', '', $parts['filename']).'.'.$parts['extension']; 
+2

最容易閱讀的解決方案,但如果文件沒有擴展名,它將無法正常工作。 – Matthew 2011-06-11 05:19:57

+0

順便說一句,這真的很酷。 – ImaginedDesign 2011-06-12 19:48:58

3

你也可以這樣做,它應該更快,然後使用pathinfo & str_replace。

$parts = explode('.', 'abc.def.ghij-klmnop.q234.mp3'); 
$ext = array_pop($parts); 
$nodots = implode('', $parts) . '.' . $ext; 
2

假設$s是文件的名稱。

$s = (($i = strrpos($s, '.')) === false) ? $s : 
    str_replace('.','',substr($s,0,$i)).substr($s,$i);