【问题标题】:Remove all dots in filename except the dot before the file extension删除文件名中的所有点,除了文件扩展名之前的点
【发布时间】:2011-06-11 04:13:06
【问题描述】:

我正在尝试清理文件名。

我想知道一种从文件名中删除除最后一个之外的所有小数的方法。我需要保留最后一个,因为扩展名随之而来。

示例:

abc.def.ghij-klmnop.q234.mp3

这个文件应该是这样的

abcdefghij-klmnopq234.mp3

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

【问题讨论】:

    标签: php filenames sanitization


    【解决方案1】:

    您可以使用正则表达式进行积极的前瞻。像这样:

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

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

    【讨论】:

      【解决方案2】:

      应该这样做:

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

      【讨论】:

      • 最容易阅读的解决方案,除非文件没有扩展名,否则它将无法正常工作。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        假设$s 是文件名。

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

        【讨论】:

          猜你喜欢
          • 2018-10-22
          • 2014-07-25
          • 1970-01-01
          • 1970-01-01
          • 2015-07-22
          • 1970-01-01
          • 2016-01-06
          • 1970-01-01
          • 2019-01-06
          相关资源
          最近更新 更多