我有:
$filename = basename(__FILE__);
$id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename);
$id
现在是没有扩展名的文件名。如何从文件中删除扩展名,但前缀和后缀呢?
prefix_ineedthis_suffix.php - > ineedthis
更新:感谢您的回答!不幸的是,我只能将一个答案标记为答案。
答案 0 :(得分:2)
$prefix = 'prefix_';
$suffix = '_suffix';
$pattern = sprintf('/%s(.+)%s/i', $prefix, $suffix);
if (preg_match($pattern, $filename, $matches)) {
$id = $matches[1];
}
答案 1 :(得分: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更快。
答案 2 :(得分:1)
如果“prefix”和“suffix”是由_
(下划线)分隔的部分,那么您可能根本不需要正则表达式:
$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 :(得分:0)
您可以使用explode()两次首先删除扩展名,然后使用前缀&后缀。这将存储数组中的所有部分,如果您以后需要这些部分,这将非常方便。