La función fnmatch()
en PHP permite verificar si una cadena coincide con un patrón específico utilizando comodines al estilo de los sistemas Unix. Esta función es útil para tareas como la búsqueda de archivos, la validación de nombres de archivos, y la coincidencia de patrones en cadenas de texto. fnmatch()
funciona similar a expresiones regulares, pero usa una sintaxis más simple con caracteres comodines como *
y ?
.
fnmatch()
en PHP?
fnmatch()
compara una cadena con un patrón utilizando comodines de estilo shell. Puede ser útil cuando se necesita validar o buscar patrones en nombres de archivos o cadenas similares, sin la complejidad de las expresiones regulares.
bool fnmatch ( string $pattern , string $string [, int $flags = 0 ] )
*
: Coincide con cualquier número de caracteres (incluidos cero caracteres).
?
: Coincide con un solo carácter.
abc]:
Coincide con cualquiera de los caracteres dentro de los corchetes.
!abc]:
Coincide con cualquier carácter que no esté dentro de los corchetes.
Devuelve true
si la cadena coincide con el patrón, y false
en caso contrario.
Flag | Descripción |
---|---|
FNM_NOESCAPE
|
Desactiva la barra invertida como carácter de escape en el patrón. |
FNM_PATHNAME
|
Coincide únicamente con la última parte del nombre en rutas. |
FNM_PERIOD
|
Si el patrón no comienza con un punto (. ), los nombres que sí lo hagan no coincidirán.
|
FNM_CASEFOLD
|
Habilita coincidencias sin distinción entre mayúsculas y minúsculas. |
fnmatch()
<?php
$pattern = "*.php";
$filename = "index.php";
if (fnmatch($pattern, $filename)) {
echo "'$filename' coincide con el patrón '$pattern'";
} else {
echo "'$filename' no coincide con el patrón '$pattern'";
}
// Resultado: 'index.php' coincide con el patrón '*.php'
fnmatch()
con caracteres específicos
<?php
$pattern = "file_?.txt";
$string = "file_1.txt";
if (fnmatch($pattern, $string)) {
echo "'$string' coincide con el patrón '$pattern'";
} else {
echo "'$string' no coincide con el patrón '$pattern'";
}
// Resultado: 'file_1.txt' coincide con el patrón 'file_?.txt'
FNM_CASEFOLD
Permite realizar coincidencias sin distinción de mayúsculas y minúsculas.
<?php
$pattern = "data*.TXT";
$string = "datafile.txt";
if (fnmatch($pattern, $string, FNM_CASEFOLD)) {
echo "'$string' coincide con el patrón '$pattern' sin distinguir mayúsculas/minúsculas";
} else {
echo "'$string' no coincide con el patrón '$pattern'";
}
// Resultado: 'datafile.txt' coincide con el patrón 'data*.TXT' sin distinguir mayúsculas/minúsculas
<?php
$archivos = ["index.php", "style.css", "script.js", "README.md"];
$pattern = "*.php";
foreach ($archivos as $archivo) {
if (fnmatch($pattern, $archivo)) {
echo "$archivo coincide con el patrón '$pattern'\n";
}
}
// Resultado esperado:
// index.php coincide con el patrón '*.php'
Para más información sobre el uso de fnmatch()
en PHP, visita la documentación oficial de PHP.
Jorge García
Fullstack developer