删除所有小数,但最后

Ima*_*ign 3 php filenames

我想知道一种方法从文件名中删除所有小数,但最后一个.我需要保留最后一个,因为扩展遵循这一点.

例:

abc.def.ghij-klmnop.q234.mp3
Run Code Online (Sandbox Code Playgroud)

这个文件应该是这样的

abcdefghij-klmnopq234.mp3
Run Code Online (Sandbox Code Playgroud)

有些扩展名超过3个字符.

Asa*_*aph 12

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

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

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


net*_*der 9

应该这样做:

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

  • 最容易阅读的解决方案,除非文件没有扩展名,否则无法正常工作. (2认同)