繁体   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