我想知道从文件名中删除所有小数的方法,但最后一个。我需要保留最后一个,因为扩展如下。
实施例
abc.def.ghij-klmnop.q234.mp3
此文件应如下所示
abcdefghij-klmnopq234.mp3
某些扩展名超过3个字符。
答案 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);