Expresiones regulares en PHP: preg_match con CSV
Clase 23 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
Viendo ahora - 24

Extraer empates de archivos masivos con PHP
16:25 min - 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
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.
<?php
$file = fopen('files/results.csv', 'r');
while (!feof($file)) {
$line = fgets($file);
echo $line;
}
fclose($file);
?>
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.
printf("match: %d\nno match: %d\n", $match, $no_match);
¿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.