2012-07-16 64 views
0

我:PHP。如何删除文件名部分?

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

$id是文件名不带扩展名了。我怎样才能从文件中删除扩展名,但前缀和后缀呢?

prefix_ineedthis_suffix.php - > ineedthis


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

回答

2
$prefix = 'prefix_'; 
$suffix = '_suffix'; 

$pattern = sprintf('/%s(.+)%s/i', $prefix, $suffix); 

if (preg_match($pattern, $filename, $matches)) { 
    $id = $matches[1]; 
} 
+0

非常感谢! @Phil – 2012-07-16 07:11:06

1

改为使用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更快。

+0

$ filename = basename(__ FILE__); – Dale 2012-07-16 06:58:40

+0

@Dale我正在编辑我的答案。现在完成 – 2012-07-16 07:01:09

+0

我没有downvote你的答案,匆忙使废物 – Dale 2012-07-16 07:02:01

0

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

+0

实际上没有必要将它爆炸两次,除非扩展名包含下划线... – poncha 2012-07-16 07:02:51

+0

我应该编辑了我的回复,我错过了basename()调用,如果调用该函数可以消除路径和文件扩展名。接得好。 – OrionRogue 2012-07-17 08:33:45

1

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

$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! 
+0

感谢您的回答!不幸的是,我只能将一个答案标记为答案。 – 2012-07-16 07:11:56