0

我有:

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

$id现在是没有扩展名的文件名。如何从文件中不仅删除扩展名,还删除前缀和后缀?

prefix_ineedthis_suffix.php ->ineedthis


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

4

4 回答 4

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

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

if (preg_match($pattern, $filename, $matches)) {
    $id = $matches[1];
}
于 2012-07-16T06:57:28.213 回答
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) );
}

根据这个问题,这比使用 RegEx 更快。

于 2012-07-16T06:58:14.643 回答
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!
于 2012-07-16T07:00:13.123 回答
0

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

于 2012-07-16T06:59:55.713 回答