dos soluciones:
- preg_match()
- str_replace() con pathinfo()
1: preg_match()
Ok, entonces el problema es que estás usando barras diagonales inversas. Debe asegurarse de que no utilice comillas dobles para definir su ruta de archivo, ya que la barra diagonal inversa se interpreta como una secuencia de escape. Use comillas simples
Además, con una expresión regular, que es mucho más sencilla de obtener un nombre de archivo al pasar de la parte posterior de la ruta hasta llegar a una barra invertida .... el truco es que una barra invertida es \\\\
.. here's why
último , no desea usar preg_replace.Acaba de encontrar el nombre de archivo con 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() con pathinfo()
Como otros han dicho, basename()
es una buena opción. Otra opción, si hay alguna posibilidad de que también necesite el directorio u otra información de ruta más adelante en la línea, es usar pathinfo()
El problema es que tanto basename como pathinfo asumen barras diagonales, por lo que debe convertir sus barras invertidas para avanzar barras diagonales:
Ejemplo:
<?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
?>
No hay razón para reemplazar los caracteres con nada usando preg_replace. Es más directo usar solo preg_match en su lugar. (Vea mi respuesta para saber cómo). –