Curso de Expresiones Regulares

Extraer empates de archivos masivos con PHP

Curso de Expresiones Regulares

Contenido del curso

Expresiones Regulares en lenguajes de programación

Extraer empates de archivos masivos con PHP

Resumen

Con una combinación de expresiones regulares y un flujo de depuración práctico, se puede transformar un archivo con decenas de miles de partidos en información clara: quién fue local, visitante o si hubo empate, todo alineado y legible. Aquí verás cómo aplicar banderas, ajustar clases de caracteres ante acentos y guiones, y medir tiempos de ejecución para tomar decisiones con datos limpios y bien presentados.

¿Cómo extraer empates con expresiones regulares en PHP?

La idea central es usar un patrón que capture los campos clave y luego operar con esa información. Se parte de una línea correcta como plantilla comentada para iterar más rápido sobre el patrón. Se capturan: fecha completa, equipo local, equipo visitante, goles de local y goles de visitante. Con esa base, se filtran los empates o se etiqueta el resultado como local o visitante.

¿Qué capturas y estructura usa el patrón?

  • Primer grupo: fecha completa de la línea.
  • Segundo grupo: equipo local.
  • Tercer grupo: equipo visitante.
  • Cuarto grupo: goles del local.
  • Quinto grupo: goles del visitante.

¿Qué aporta la bandera i al match?

  • Activa modo case insensitive para evitar problemas con mayúsculas y minúsculas.
  • Se coloca al final del patrón: la i después del último slash.
  • Reduce la necesidad de duplicar rangos A–Z y a–z.

¿Cómo manejar espacios, guiones y acentos en nombres?

  • Los nombres de países incluyen espacios y guiones: se ajusta la clase de caracteres para contemplarlos.
  • Surgen “caracteres raros” como acentos o puntos: São Tomé, Curazao, Saint Kitts.
  • Una salida rápida es cambiar a .+ para abarcar variantes, entendiendo el riesgo de cortar a través de la coma.
  • La ancla en los dos dígitos del marcador ayuda a mantener el patrón estable, incluso con un campo como friendly al final.
<?php // Ejemplo de lógica de resultado basada en capturas previas ($m2..$m5): if ($m4 == $m5) { echo "empate\t"; } elseif ($m4 > $m5) { echo "local \t"; // dos espacios extra para mostrar alineación. } else { echo "visitante\t"; } printf("%s, %s %d-%d\n", $m2, $m3, $m4, $m5);

¿Cómo depurar errores de match sin frustración?

Entender una expresión regular a la primera no es realista. La estrategia efectiva: comentar la impresión de aciertos e imprimir solo las líneas que no hacen match. Así se detectan rápido ausencias de espacios, guiones o puntos.

¿Qué estrategia acelera la corrección del patrón?

  • Comentar la salida de aciertos y mostrar únicamente fallos.
  • Revisar visualmente qué rompe el patrón: espacios, guiones, puntos o tildes.
  • Ajustar la clase de caracteres, reejecutar y verificar el conteo.

¿Qué señales dieron los conteos intermedios?

  • Un conteo parcial grande al inicio evidenció que el patrón cortaba mal.
  • Con espacios y guiones en la clase, el conteo bajó a 10646.
  • Luego a 907, revelando acentos y puntos no contemplados.
  • Tras ampliar a .+, quedaron solo dos líneas problemáticas (una en blanco), con el resto correcto.

¿Qué diferencias notar con Perl al leer líneas?

  • Aquí no se aplicó chomp como en Perl: las líneas en blanco pueden colarse.
  • Ajustar el manejo de fin de línea según la consola y el entorno.

¿Cómo presentar y medir resultados para lectura rápida?

La presentación importa. Se etiqueta el resultado con texto natural y se alinea con tab para lectura ágil. Separar los equipos con coma evita confusiones. Finalmente, se mide el tiempo total para evaluar rendimiento.

¿Cómo generar etiquetas legibles a partir de datos?

  • Comparar goles: si m4 == m5, imprimir empate; si m4 > m5, local; en otro caso, visitante.
  • Usar printf para un formato consistente: Equipo local, Equipo visitante marcador.
  • Añadir una coma entre equipos para claridad.
<?php // Etiquetado y salida legible. if ($m4 == $m5) { echo "empate\t"; } elseif ($m4 > $m5) { echo "local\t"; } else { echo "visitante\t"; } printf("%s, %s %d-%d\n", $m2, $m3, $m4, $m5);

¿Qué hace el tabulador en consola?

  • El tab avanza al siguiente múltiplo fijo, típicamente 8 espacios.
  • Alinea columnas aunque las etiquetas tengan longitudes distintas.
  • La visualización mejora y la lectura es inmediata.

¿Cuánto tarda y por qué importa?

  • Medir con time antes y después del proceso.
  • En la práctica, leer el archivo tomó cerca de 1 segundo, incluso imprimiendo.
  • Separar por comas en arreglos puede tardar 3–4 segundos con 30–40 mil líneas.
  • Las expresiones regulares, cercanas al procesador, suelen ser más rápidas para este patrón.
<?php $t = time(); // ... procesamiento y salida ... printf("tiempo: %d\n", time() - $t);

¿Tú cómo modelarías el patrón para cubrir acentos y puntos sin caer en .+? Comparte tu enfoque y pruebas de rendimiento.