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.
No aplica, porque es grabado y si algo sale mal lo vuelven a grabar, pero si cuando es en vivo se siente la emoción, pero algo es seguro siempre aunque haya algún problemita, es fructífero :)
Creo que si aplica, si fuera tan fácil como "volver a grabar" este curso habría salido sin varios errores (lo cual estaría mal, porque ocultaría la realidad de la profesión) :D
¡Saludos!
"Aceptando que no es uno de los mejores lenguajes del mundo"
Por favor, dejen que este caballero haga todos los cursos de programación.
Match para expresiones regulares en PHP:
preg_match('/regex/', $line, $m)
donde:
regex: es la expresion regular.
$line: cadena de caracteres (cada línea del archivo).
$m: arreglo en donde cada match va a ir en cada uno de los lugares. En el script, este arreglo tiene dos elementos donde el elemento [0] es la cadena de caracteres de prueba y el elemento [1] es el grupo de caracteres que hace match.
Expresión regular para obtener partidos jugados en enero del 2018:
Por que PHP no es el mejor lenguaje del mundo??
Acaso existe el mejor lenguaje del mundo ??
tienes razón, exite, el lenguaje mas amado, el mas querido, el mas usado
Por si están utilizando alguna consola de Ubuntu, Linux o wsl en Windows pueden instalar php solo con este comando y ya pueden ejecutar el archivo.
sudo apt install php7.4-cli
En Windows para ejecutar un archivo php se puede utilizar XAMPP; lo instalan, inicializan el servidor Apache. El archivo *.php tiene que estar en la carpeta htdocs localizado dentro de la carpeta de instalación llamada xampp (por default en C:) y ya en el navegador colocan localhost/archivo.php.
O puedes poner la variable de entorno en Windows para apuntar al binario de php.exe y ejecutarlo directamente desde CMD, más sencillo aún.
Jajaja php pobrecito python se los trago
Jajaja
Para PHP:
Las expresiones regulares en PHP van entre comillas simples:
PHP fue mi primer lenguaje que permitio trabajar, Java el primero que me enseñaron en la universidad y Python el primero que me hizo ver que se puede aprender más. Amemos a los lengujaes no hagan bandos. Saludos.
Los lenguajes son herramientas, uno usa la que mejor vaya para cada caso.
Programar en vivo es un deporte de alto riesgo. :D
Muy bueno todo, gracias por la clase..
:)
aunque se notan los sesgos contra php del profe ja ja ja
php fue por un tiempo mi lenguaje favorito, gracias por usarlo 😄
cuál es ahora ?
No respondiste cuál es lenguaje favorito de hoy en día nos dejas con la duda jajaja
¿Alguien puede orientarme de como correr el archivo regex.php en ubuntu? La consola me dice que debo instalar php7.2-cli y después instalar hhvm, sigo esas instrucciones pero me manda errores en esas instalaciones.
Hola Ruben, nos compartes el error que te muestra al instalar para ayudarte de mejor manera
Si ya tienes instalado php-cli, basta con que en terminal ejecutes:
php ruta/al/archivo.php
A alguien más le arroja este error?
Warning:feof() expects parameter 1 to be resource, bool given in/Users/zomars/Sites/REGEX-master/scripts/php_regex_exercise.php on line 5PHPWarning:fgets() expects parameter 1 to be resource, bool given in/Users/zomars/Sites/REGEX-master/scripts/php_regex_exercise.php on line 6Warning:fgets() expects parameter 1 to be resource, bool given in/Users/zomars/Sites/REGEX-master/scripts/php_regex_exercise.php on line 6PHPWarning:feof() expects parameter 1 to be resource, bool given in/Users/zomars/Sites/REGEX-master/scripts/php_regex_exercise.php on line 5