Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP。如何删除文件名部分?_Php_Regex - Fatal编程技术网

PHP。如何删除文件名部分?

PHP。如何删除文件名部分?,php,regex,Php,Regex,我有: $filename = basename(__FILE__); $id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename); $id现在是没有扩展名的文件名。如何从文件中删除扩展名以及前缀和后缀 前缀\u inedthis\u suffix.php->inedthis 更新:谢谢你的回答!不幸的是,我只能将一个答案标记为答案。请改用。如果需要,这可以删除目录部分和扩展部分 $prefix = 'prefix_'; $suffix

我有:

$filename =  basename(__FILE__);
$id = preg_replace("/\\.[^.\\s]{3,4}$/", "", $filename);
$id
现在是没有扩展名的文件名。如何从文件中删除扩展名以及前缀和后缀

前缀\u inedthis\u suffix.php->inedthis


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

请改用。如果需要,这可以删除目录部分和扩展部分

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

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

if (preg_match($pattern, $filename, $matches)) {
    $id = $matches[1];
}
$id = basename(__FILE__, "_suffix.php")
$prefix = "prefix_";
if (substr($id, 0, strlen($prefix) ) == $prefix) {
    $id = substr($id, strlen($prefix), strlen($id) );
}
根据这一点,它比使用正则表达式要快。

请改用正则表达式。如果需要,这可以删除目录部分和扩展部分

$id = basename(__FILE__, "_suffix.php")
$prefix = "prefix_";
if (substr($id, 0, strlen($prefix) ) == $prefix) {
    $id = substr($id, strlen($prefix), strlen($id) );
}
根据这一点,它比使用正则表达式要快。

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

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

如果“前缀”和“后缀”是由
\u
分隔的部分(下划线),那么您可能根本不需要正则表达式:

 $parts = explode("_", $filename);
 array_shift($parts);
 array_pop($parts);
 $ineedthis = implode("_", $parts);
或者,如果此不包含下划线,则:

 $parts = explode("_", $filename);
 $ineedthis = $parts[1];

如果您仍然想使用正则表达式,那么:

if(preg_match("/^[^_]+_(.*)_[^_]+\.[a-z]{3,4}$/", $filename, $match))
   $ineedthis = $match[1];
else
   /// oops!
如果“prefix”和“suffix”是由
(下划线)分隔的部分,那么您可能根本不需要正则表达式:

 $parts = explode("_", $filename);
 array_shift($parts);
 array_pop($parts);
 $ineedthis = implode("_", $parts);
或者,如果此
不包含下划线,则:

 $parts = explode("_", $filename);
 $ineedthis = $parts[1];

如果您仍然想使用正则表达式,那么:

if(preg_match("/^[^_]+_(.*)_[^_]+\.[a-z]{3,4}$/", $filename, $match))
   $ineedthis = $match[1];
else
   /// oops!

$filename=basename(文件);谢谢你的回答,@Alvin Wong!不幸的是,我只能将一个答案标记为答案。$filename=basename(FILE);谢谢你的回答,@Alvin Wong!很遗憾,我只能将一个答案标记为答案。谢谢你的回答!很遗憾,我只能将一个答案标记为答案。谢谢你的回答!不幸的是,我只能将一个答案标记为答案。我应该编辑我的答案,我错过了basename()调用,如果调用它来去除路径和文件扩展名,它将同时消除路径和文件扩展名。很好。我应该编辑我的响应,我错过了basename()调用,如果调用它来去除路径和文件扩展名,它将同时消除路径和文件扩展名。抢手货