Deux solutions:
- preg_match()
- str_replace() avec pathinfo()
1: preg_match()
Ok, le problème est que vous utilisez des barres obliques inverses. Vous devez vous assurer que vous n'utilisez pas les guillemets pour définir votre chemin de fichier, puisque la barre oblique inverse est interprétée comme une séquence d'échappement. Utilisez des guillemets simples.
De plus, avec une expression régulière, il est beaucoup plus simple d'obtenir un nom de fichier en déplaçant à l'arrière du chemin jusqu'à ce que vous frappez une barre oblique inverse .... le truc est que une barre oblique inverse est \\\\
.. here's why
Enfin , vous ne voulez pas utiliser preg_replace.Il suffit de trouver le nom du fichier avec preg_match:
<?php
// Use single quotes or the backslash will be interpreted as an esacpe sequence
$filepath = '\abc\def\filename.txt';
// You have to use 4 backslashes to represent your single backslash
// The regex picks the characters that are NOT \ from the end of the path
$pattern = '/[^\\\\]+$/';
// Use $matches to store the match
preg_match($pattern, $filepath, $matches);
// Display answer now, or use later
echo $matches[0];
?>
2: str_replace() avec pathinfo()
Comme d'autres ont dit, basename()
est une bonne option. Une autre option, si vous avez besoin du répertoire ou d'autres informations de chemin plus tard, est d'utiliser pathinfo()
Le problème est que les deux basename et pathinfo supposent des barres obliques, donc vous devez convertir vos antislashs vers l'avant barres obliques:
Exemple:
<?php
// Make sure to use single quotes
$filepath='abc\filename.txt';
// Replace backslash with forward slash
$filepath = str_replace('\\', '/', $filepath);
$path_parts = pathinfo($filepath);
// This is the answer you want
echo $path_parts['basename'], "\n";
// But you also have access to these
echo $path_parts['dirname'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>
Il n'y a aucune raison de remplacer les caractères avec rien en utilisant preg_replace. Il est plus direct d'utiliser simplement preg_match à la place. (Voir ma réponse pour comment). –