【发布时间】:2011-06-11 04:13:06
【问题描述】:
我正在尝试清理文件名。
我想知道一种从文件名中删除除最后一个之外的所有小数的方法。我需要保留最后一个,因为扩展名随之而来。
示例:
abc.def.ghij-klmnop.q234.mp3
这个文件应该是这样的
abcdefghij-klmnopq234.mp3
某些扩展名超过 3 个字符。
【问题讨论】:
标签: php filenames sanitization
我正在尝试清理文件名。
我想知道一种从文件名中删除除最后一个之外的所有小数的方法。我需要保留最后一个,因为扩展名随之而来。
示例:
abc.def.ghij-klmnop.q234.mp3
这个文件应该是这样的
abcdefghij-klmnopq234.mp3
某些扩展名超过 3 个字符。
【问题讨论】:
标签: php filenames sanitization
您可以使用正则表达式进行积极的前瞻。像这样:
$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);
【讨论】: