簡體   English   中英

刪除文件名中的所有點,除了文件擴展名之前的點

[英]Remove all dots in filename except the dot before the file extension

我正在嘗試清理文件名。

我想知道一種從文件名中刪除所有小數的方法,除了最后一個。 我需要保留最后一個,因為擴展名隨之而來。

例子:

abc.def.ghij-klmnop.q234.mp3

這個文件應該看起來像

abcdefghij-klmnopq234.mp3

某些擴展名超過 3 個字符。

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

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

執行上述操作后, $nodots將包含abcdefghij-klmnopq234.mp3 正則表達式基本上是說匹配后面跟着另一個句點的所有句點。 所以最后一個時期將不匹配。 我們用空字符串替換所有匹配項,然后得到所需的結果。

那應該這樣做:

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

你也可以這樣做,它應該比使用 pathinfo 和 str_replace 更快。

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

假設$s是文件名。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM