0

私は持っている:

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

$id現在、拡張子のないファイル名です。拡張子だけでなく、プレフィックスとサフィックスもファイルから削除するにはどうすればよいですか?

prefix_ineedthis_suffix.php -> ineedthis


更新: ご回答ありがとうございます。残念ながら、回答としてマークできる回答は 1 つだけです。

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) );
}

この質問によると、これは正規表現を使用するよりも高速です。

于 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() を 2 回使用できます。これにより、すべてのパーツが配列内に格納されるため、後でそれらのパーツが必要になった場合に便利です。

于 2012-07-16T06:59:55.713 に答える