$filename = basename(__FILE__);
$id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename);
$id
是文件名不帶擴展名了。我怎樣才能從文件中刪除擴展名,但前綴和後綴呢?
prefix_ineedthis_suffix.php - > ineedthis
更新:謝謝您的回答!不幸的是,我只能將一個答案標記爲答案。
$filename = basename(__FILE__);
$id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename);
$id
是文件名不帶擴展名了。我怎樣才能從文件中刪除擴展名,但前綴和後綴呢?
prefix_ineedthis_suffix.php - > ineedthis
更新:謝謝您的回答!不幸的是,我只能將一個答案標記爲答案。
$prefix = 'prefix_';
$suffix = '_suffix';
$pattern = sprintf('/%s(.+)%s/i', $prefix, $suffix);
if (preg_match($pattern, $filename, $matches)) {
$id = $matches[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更快。
您可以使用explode()兩次先刪除擴展名,然後使用前綴&後綴。這將存儲數組中的所有部分,如果以後需要這些部分,這很方便。
實際上沒有必要將它爆炸兩次,除非擴展名包含下劃線... – poncha 2012-07-16 07:02:51
我應該編輯了我的回覆,我錯過了basename()調用,如果調用該函數可以消除路徑和文件擴展名。接得好。 – OrionRogue 2012-07-17 08:33:45
如果「前綴」和「後綴」是由_
(下劃線)分離的部分,那麼你可能不需要正則表達式的所有:
$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!
感謝您的回答!不幸的是,我只能將一個答案標記爲答案。 – 2012-07-16 07:11:56
非常感謝! @Phil – 2012-07-16 07:11:06