Extraer empates de archivos masivos con PHP
Clase 24 de 29 • Curso de Expresiones Regulares
Contenido del curso
El lenguaje: caracteres, operadores, y construcciones
- 5

El punto en regex: selecciona cualquier carácter
09:55 min - 6

\d \w \s: las 3 clases que localizan todo
13:55 min - 7

Cuantificadores regex: *, + y ? en acción
17:42 min - 8

Contadores en expresiones regulares
14:02 min - 9

Greedy vs lazy en regex: cuándo usar cada uno
07:47 min - 10

Negaciones con gorrito en expresiones regulares
06:49 min - 11

Cómo detectar números telefónicos sin letras
01:06 min - 12

Cómo procesar archivos CSV con millones de líneas
08:00 min
Uso práctico de Expresiones Regulares
- 13

Filtrar logs gigantes con expresiones regulares
07:22 min - 14

Expresiones regulares para URLs HTTP
08:07 min - 15

Regex para validar teléfonos con separadores y extensiones
12:30 min - 16

Validación de emails con regex
13:42 min - 17

Validación de coordenadas GPS con regex
17:16 min - 18

Validar nombres propios con regex
03:21 min
Usos avanzados en Expresiones Regulares
Expresiones Regulares en lenguajes de programación
- 20

Cómo extraer variables de URLs con regex
10:48 min - 21

Regex en múltiples lenguajes con CSV real
03:29 min - 22

Perl: CSV de fútbol en cero segundos
23:35 min - 23

Expresiones regulares en PHP: preg_match con CSV
09:29 min - 24

Extraer empates de archivos masivos con PHP
Viendo ahora - 25

Python regex para análisis de archivos CSV
21:58 min - 26

Lectura de archivos con BufferedReader en Java
07:59 min - 27

Escapar regex en Java: doble barra
08:48 min - 28

Validación de emails en JavaScript con regex
17:35 min - 29

Grep: filtra archivos masivos con regex
08:18 min
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.