$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