删除所有小数,但最后

时间:2011-06-11 04:13:06

标签: php filenames

我想知道从文件名中删除所有小数的方法,但最后一个。我需要保留最后一个,因为扩展如下。

实施例

abc.def.ghij-klmnop.q234.mp3

此文件应如下所示

abcdefghij-klmnopq234.mp3

某些扩展名超过3个字符。

4 个答案:

答案 0 :(得分:12)

你可以使用具有正向前瞻的正则表达式。像这样:

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

执行上述操作后,$nodots将包含abcdefghij-klmnopq234.mp3。正则表达式基本上是匹配所有句点,后面跟着另一个句点。所以最后一段时间不匹配。我们用空字符串替换所有匹配项,我们留下了所需的结果。

答案 1 :(得分:9)

应该这样做:

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

答案 2 :(得分:3)

你也可以这样做,它应该比使用pathinfo&更快str_replace函数。

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

答案 3 :(得分:2)

假设$s是文件的名称。

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