PHP sigue siendo clave en la web moderna: WordPress y Drupal lo usan a diario. Aquí verás, paso a paso, cómo leer un CSV y aplicar expresiones regulares con preg_match para filtrar por enero de 2018, contar coincidencias y extraer grupos útiles sin complicaciones.
¿Cómo procesar un CSV en PHP con fopen y fgets?
Abrir y recorrer archivos en PHP es directo. La secuencia correcta asegura que cada línea se lea y se cierre el recurso sin fugas. Un error típico al programar en vivo fue usar un punto en lugar de una coma en los parámetros, lo que rompió fopen; corregido, se confirmó la lectura de 39,009 líneas, útil para validar que el iterador funciona de punta a punta.
Usa fopen en modo de solo lectura para abrir el archivo CSV.
Itera con while y la comprobación de fin de archivo con feof.
Obtén cada línea con fgets y verifica en pantalla con echo.
Cierra el recurso con fclose para liberar memoria.
Habilidades practicadas: lectura de archivos, uso de iteradores, depuración de errores de sintaxis, verificación de conteo de líneas.
¿Qué hace preg_match en PHP con expresiones regulares?
preg_match devuelve un booleano: true cuando hay match y false cuando no. Además, permite pasar por referencia un arreglo que captura la coincidencia completa y cada grupo definido. Para evitar escapes innecesarios, se prefieren comillas simples en el patrón.
Delimitadores: usa barras /.../ para la expresión.
Anclas: ^ y $ definen inicio y fin de línea.
Comodín: el punto-asterisco .*, el wild card, permite “lo que sea” al final.
Arreglo de resultados: $m[0] guarda la coincidencia completa; los grupos inician en $m[1].
<?php$match=0;$no_match=0;if(preg_match('/^2018\-01\-.*$/',$line,$m)){$match++;print_r($m);// inspecciona coincidencias y grupos.}else{$no_match++;}printf("match: %d\nno match: %d\n",$match,$no_match);?>
Conceptos clave: booleano true/false, grupos de captura, anclaje de línea, comodín .* y necesidad de escapar guiones.
¿Cómo filtrar por fecha 2018-01 con regex en PHP?
Se busca “todos los juegos de enero del 2018”. Un patrón posible ancla el inicio con 2018-01- y suelta la cola con .* para aceptar cualquier contenido posterior sin importar su longitud.
Usa ^2018-01- para anclar año y mes.
Añade .* para aceptar el resto de la línea.
Evita patrones “demasiado estrictos” que no dejen espacio a otros campos.
if(preg_match('/^2018\-01\-.*$/',$line,$m)){// Coincide con cualquier registro de enero 2018.}
¿Cómo capturar el día y validar con coma?
Cuando el CSV separa campos con comas, puedes capturar el día como primer grupo y confirmar la estructura al buscar la coma inmediatamente después del día.
Define un grupo para el día antes de la coma.
La coma actúa como marcador de campo siguiente en el CSV.
if(preg_match('/^2018\-01\-(.*),/',$line,$m)){// $m[1] corresponde al día capturado antes de la coma.}
¿Cómo contar matches y depurar errores comunes?
Contar matches y no matches te da una estadística rápida de cobertura del filtro. Un bug frecuente está en la invocación del script o redirecciones del standard output que confunden el conteo de líneas con el de coincidencias.
Inicializa contadores $match y $no_match.
Incrementa según el resultado de preg_match.
Usa printf para un reporte claro y con saltos de línea.
¿Qué resultados y datos se observaron al ejecutar el filtro?
El patrón para enero de 2018 arrojó 64 coincidencias. Al imprimir el arreglo de matches, se vio que $m[0] contiene la línea completa evaluada y $m[1] el primer grupo, en este caso el día. Este comportamiento es consistente con PHP y lenguajes afines como Perl y Python.
64 coincidencias para enero 2018.
Ejemplo de línea: 2018-01-02, Omán vs Bahrein, 1-0, amistoso.
$m[0]: cadena completa que coincidió.
$m[1]: día del partido capturado por el primer grupo.
Idea central: lo más importante es diseñar una expresión regular válida que refleje el formato de la línea completa; el código PHP alrededor es breve y directo.
¿Tienes otra estructura de CSV o un patrón de fecha distinto? Comparte tu formato y afinamos la expresión regular juntos.