2012-07-16 110 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