¿Qué es una expresión regular? Una explicación completa
Respuesta rápida
Una expresión regular es un patrón que describe un conjunto de cadenas. Utiliza caracteres literales (coinciden entre sí) y metacaracteres (*, +, ?, ., ^, $, [], (), {}, |, \) con significados especiales. Regex se utiliza para validación, búsqueda, extracción y reemplazo. Utilice nuestro Regex Tester gratuito para probar patrones con texto en su navegador.
Introducción
Una expresión regular (regex o regexp) es una secuencia de caracteres que define un patrón de búsqueda. El patrón lo utilizan algoritmos de búsqueda de cadenas para buscar, hacer coincidir o reemplazar texto. Las expresiones regulares se originaron en la teoría del lenguaje formal en la década de 1950 (Stephen Kleene) y fueron adoptadas en las herramientas de texto Unix (grep, sed, awk) en la década de 1970. Hoy en día, las expresiones regulares están integradas en prácticamente todos los lenguajes de programación y editores de texto. Regex es poderoso: puede validar formatos de correo electrónico, extraer datos de registros y encontrar patrones complejos, pero la sintaxis es densa y notoriamente difícil de leer.
Paso a paso
-
Comprender literales y metacaracteres
Los caracteres literales (a, b, 1, @) coinciden entre sí. Los metacaracteres tienen significados especiales: . coincide con cualquier carácter, * significa cero o más, + significa uno o más, ? significa cero o uno, ^ los partidos comienzan, $ los partidos terminan.
-
Aprende clases de personajes.
Los corchetes [] definen una clase de carácter: [aeiou] coincide con cualquier vocal, [0-9] coincide con cualquier dígito, [^0-9] coincide con cualquier no dígito. Clases de taquigrafía: \d (dígito), \w (carácter de palabra), \s (espacio en blanco) y sus negaciones en mayúsculas.
-
Usa cuantificadores
Los cuantificadores especifican cuántas veces se repite un patrón: * (0+), + (1+), ? (0 o 1), {n} (exactamente n), {n,} (n+), {n,m} (n a m). Codicioso por defecto; agregar ? para coincidencias diferidas (por ejemplo, *?).
-
Grupo y ancla
Los paréntesis () crean grupos de captura. Alternancia | coincide con cualquier lado (gato|perro). Los anclajes ^ y $ coinciden con el inicio y el final de la cadena. Úselos para construir patrones complejos a partir de otros más simples.
Ejemplos
Haga coincidir un patrón similar al de un correo electrónico
Aporte: Pattern: [a-z]+@[a-z]+\.[a-z]+
Producción: Coincidencias: alice@example.com, bob@test.org
Coincidir con el formato de un número de teléfono
Aporte: Pattern: \d{3}-\d{3}-\d{4}
Producción: Matches: 555-123-4567
Extraer pares clave-valor
Aporte: Pattern: (\w+)=(\w+)
Producción: Matches 'key=value' with group 1 as key, group 2 as value
Problemas comunes
- La coincidencia codiciosa consume en exceso —.* coincidencias tanto como sea posible. Usar .*? para una coincidencia diferida para encontrar la coincidencia más corta.
- Olvidarse de escapar de los caracteres especiales —., *, +, ?, etc. son especiales. Utilice \ para hacer coincidirlos literalmente (por ejemplo, \. coincide con un punto literal).
- Retroceso catastrófico: los patrones con cuantificadores anidados (por ejemplo, (a+)+) pueden tardar un tiempo exponencial en ciertas entradas, lo que provoca ataques ReDoS.
- Coincidencia excesiva: sin anclajes (^ y $), un patrón coincide en cualquier lugar. Utilice ^...$ para hacer coincidir toda la cadena.
Consejos
- Comience de manera simple y agregue complejidad de manera incremental: depurar una expresión regular compleja de una sola vez es muy difícil.
- Utilice un probador de expresiones regulares para experimentar con patrones con texto de muestra y vea las coincidencias resaltadas en tiempo real.
- Comente expresiones regulares complejas usando el modo extendido (indicador/x en algunos motores) o divídalas en partes con nombre.
- Utilice nuestro Regex Tester para probar patrones instantáneamente en su navegador, sin necesidad de registrarse y totalmente privado.