【问题标题】:PHP. How to remove filename parts?php。如何删除文件名部分?
【发布时间】:2012-07-16 15:10:19
【问题描述】:

我有:

$filename =  basename(__FILE__);
$id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename);

$id 现在是没有扩展名的文件名。如何从文件中不仅删除扩展名,还删除前缀和后缀?

prefix_ineedthis_suffix.php ->ineedthis


更新:感谢您的回答!不幸的是,我只能将一个答案标记为答案。

【问题讨论】:

    标签: php regex


    【解决方案1】:
    $prefix = 'prefix_';
    $suffix = '_suffix';
    
    $pattern = sprintf('/%s(.+)%s/i', $prefix, $suffix);
    
    if (preg_match($pattern, $filename, $matches)) {
        $id = $matches[1];
    }
    

    【讨论】:

      【解决方案2】:

      如果“前缀”和“后缀”是由_(下划线)分隔的部分,那么您可能根本不需要正则表达式:

       $parts = explode("_", $filename);
       array_shift($parts);
       array_pop($parts);
       $ineedthis = implode("_", $parts);
      

      或者,如果ineedthis 肯定不包含下划线,那么:

       $parts = explode("_", $filename);
       $ineedthis = $parts[1];
      

      如果你还想使用正则表达式,那么:

      if(preg_match("/^[^_]+_(.*)_[^_]+\.[a-z]{3,4}$/", $filename, $match))
         $ineedthis = $match[1];
      else
         /// oops!
      

      【讨论】:

      • 感谢您的回答!不幸的是,我只能将一个答案标记为答案。
      【解决方案3】:

      请改用basename(string $path , string $suffix)。如果需要,这可以删除目录部分和扩展部分。

      $id = basename(__FILE__, "_suffix.php")
      $prefix = "prefix_";
      if (substr($id, 0, strlen($prefix) ) == $prefix) {
          $id = substr($id, strlen($prefix), strlen($id) );
      }
      

      根据this question,这比使用 RegEx 更快。

      【讨论】:

      • $filename = basename(FILE);
      • 感谢您的回答,@Alvin Wong!不幸的是,我只能将一个答案标记为答案。
      【解决方案4】:

      您可以使用explode() 两次,首先删除扩展名,然后删除前缀和后缀。这会将所有部分存储在数组中,如果您以后需要这些部分,这将很方便。

      【讨论】:

      • 我应该编辑我的回复,我错过了 basename() 调用,如果调用它会消除路径和文件扩展名。很好的收获。
      猜你喜欢
      • 2017-04-08
      • 2020-02-11
      • 1970-01-01
      • 2017-09-16
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多