Volver a la página principal
lunes 4 noviembre 2024
13

Cómo hacer coincidencia de patrones con fnmatch() en PHP

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 ?.

¿Qué es 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.

Sintaxis

bool fnmatch ( string $pattern , string $string [, int $flags = 0 ] )
  • pattern: El patrón con el que se desea comparar, que puede incluir comodines.
  • string: La cadena que se desea verificar contra el patrón.
  • flags (opcional): Modificadores que controlan aspectos de la comparación.

Comodines y patrones comunes

  • *: 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.

Valores de retorno

Devuelve true si la cadena coincide con el patrón, y false en caso contrario.

Flags opcionales

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.

Ejemplos de uso de fnmatch()

Ejemplo básico de coincidencia con comodines

<?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'

Uso de 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'

Coincidencia con el flag 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

Ejemplo práctico: Filtrar archivos en un directorio

<?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'

Referencia oficial

Para más información sobre el uso de fnmatch() en PHP, visita la documentación oficial de PHP.

Etiquetas:
php
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer