Regex con preg_match en PHP
Extraer campos estructurados de una línea de log con PCRE.
<?php
$log = "2026-08-02 14:03 GET /api/users 200";
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})/', $log, $m)) {
echo "year $m[1], month $m[2]\n";
}
// named capture groups read better than indexes
$pattern = '/(?<verb>GET|POST) (?<path>\S+) (?<status>\d{3})/';
if (preg_match($pattern, $log, $hit)) {
echo "$hit[verb] $hit[path] -> $hit[status]\n";
}
echo preg_match_all('/\d+/', $log, $nums), " number runs\n";
Cómo funciona
preg_matchllena$mcon la coincidencia completa y una entrada por grupo.(?<verb>...)nombra un grupo, así$hit[verb]le gana a contar paréntesis.preg_match_alldevuelve cuántas veces coincidió el patrón.
Palabras clave y builtins usados aquí
echoifpreg_matchpreg_match_all
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 412
- Tokens
- 68
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 63 segundos.
Paso 3 de 3 en Cadenas y regex; paso 15 de 27 en Fundamentos del lenguaje.