¿Por qué probar tus regex en línea?
Una expresión regular incorrecta en producción genera bugs silenciosos. Los errores de sintaxis pasan desapercibidos hasta que un edge case los expone. Probar antes de desplegar elimina este riesgo.
Tres casos de uso principales:
- Validar un patrón antes de integrarlo - Confirma que tu regex coincide solo con lo esperado, sin falsos positivos
- Depurar un patrón existente - Identifica por qué una regex falla al capturar las subcadenas correctas
- Probar la compatibilidad RE2 - Verifica que tu patrón funciona con el motor RE2 de Go antes del despliegue
Cómo usar el regex tester en 3 pasos
Paso 1: Introducir el patrón
Escribe tu expresión regular en el campo dedicado. Ejemplo para extraer un dominio SPF:
include:(?P<domain>[a-z0-9._-]+)
Paso 2: Pegar el texto de prueba
Pega el texto contra el que quieras probar tu regex:
v=spf1 include:_spf.captaindns.com include:spf.protection.outlook.com ~all
Activa los flags según necesidad: sin distinción de mayúsculas, multilínea, dot-all o non-greedy.
Paso 3: Leer los resultados
Cada coincidencia muestra tres datos: su posición byte, el contenido coincidente y los grupos de captura. Los grupos nombrados se identifican por su etiqueta.
¿Qué es una expresión regular?
Una expresión regular (regex) es un patrón que describe un conjunto de cadenas. Permite buscar, validar o extraer texto según reglas formales.
Componentes fundamentales:
| Elemento | Sintaxis | Ejemplo | Resultado |
|---|---|---|---|
| Carácter literal | a | abc en "abcdef" | coincide con "abc" |
| Clase de caracteres | [a-z] | [0-9]+ en "port 443" | coincide con "443" |
| Cuantificador | +, *, ? | a+ en "aab" | coincide con "aa" |
| Grupo de captura | (...) | (abc) en "xabcx" | captura "abc" |
| Ancla | ^, $ | ^v=spf1 | coincide al inicio de línea |
| Alternativa | a|b | cat|dog en "my cat" | coincide con "cat" |
Ejemplo concreto con grupos nombrados:
(?P<protocol>https?)://(?P<domain>[a-z0-9.-]+)
Aplicado a https://captaindns.com/tools:
- Grupo
protocol:https - Grupo
domain:captaindns.com
Sintaxis RE2 vs PCRE: las diferencias
RE2 es el motor regex de Go y Google. PCRE es el estándar en PHP, JavaScript y Python. Sus diferencias impactan directamente la portabilidad de tus patrones.
| Funcionalidad | RE2 | PCRE |
|---|---|---|
| Tiempo de ejecución | Lineal garantizado O(n) | Exponencial posible |
| Lookahead/lookbehind | No soportado | Soportado |
Backreferences (\1) | No soportado | Soportado |
| Cuantificadores posesivos | No soportado | Soportado |
| Grupos nombrados | (?P<nombre>...) | (?P<nombre>...) o (?<nombre>...) |
| Flag non-greedy global | (?U) | No estándar |
| Unicode | Nativo (UTF-8) | Mediante flag u |
La garantía de tiempo lineal elimina los ataques ReDoS. Por eso RE2 es el estándar para servicios web expuestos a entradas no controladas.
Casos de uso reales
Validar un registro SPF
Situación: Tu registro SPF contiene varios mecanismos include y necesitas verificar cada dominio.
Diagnóstico: Prueba include:([a-z0-9._-]+) contra el valor de tu registro TXT. La herramienta lista cada dominio con su posición byte exacta.
Acción: Compara los dominios extraídos con tu lista autorizada. Corrige cualquier include faltante o erróneo con el Inspector SPF.
Extraer direcciones de email de un texto
Situación: Un archivo de configuración contiene direcciones de correo mezcladas con otros datos.
Diagnóstico: Usa [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} con el flag sin distinción de mayúsculas. Cada email aparece como coincidencia independiente.
Acción: Exporta las direcciones extraídas. Verifica su formato y elimina duplicados antes de integrarlas en tu sistema.
Depurar un patrón de log parsing
Situación: Tu parser de logs no captura el timestamp correctamente. Los grupos devuelven valores truncados.
Diagnóstico: Prueba con grupos nombrados: (?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}). Verifica que cada grupo capture la subcadena completa.
Acción: Ajusta los cuantificadores o clases de caracteres. Repite el test hasta que cada grupo devuelva el valor esperado.
Errores de sintaxis comunes
| Error | Causa | Corrección |
|---|---|---|
error parsing regexp | Paréntesis sin cerrar o cuantificador sin objetivo | Verifica los paréntesis y corchetes |
invalid escape sequence | Secuencia de escape no reconocida en RE2 | Usa \\ para un backslash literal |
invalid named capture | Sintaxis incorrecta del grupo nombrado | Usa (?P<nombre>...), no (?<nombre>...) |
invalid repeat count | Cuantificador fuera de límites | Reduce el valor del cuantificador |
| Sin resultados | Patrón demasiado restrictivo o flag faltante | Activa sin distinción de mayúsculas o dot-all |
❓ FAQ - Preguntas frecuentes
P: ¿Por qué mi regex no encuentra ninguna coincidencia?
R: Verifica la sintaxis RE2. Los lookahead/lookbehind y backreferences no están soportados. Activa el flag "sin distinción de mayúsculas" si tu texto contiene mayúsculas inesperadas. Verifica también los caracteres especiales sin escapar.
P: ¿Qué es la sintaxis RE2?
R: RE2 es el motor regex de Go. Garantiza un tiempo de ejecución lineal respecto al tamaño de la entrada. PCRE puede ser vulnerable a ataques ReDoS; RE2 no.
P: ¿Qué flags regex están disponibles?
R: Cuatro flags: sin distinción de mayúsculas (i), multilínea (m), dot coincide con newline (s) y non-greedy (U). Cada flag modifica el comportamiento del motor para todo el patrón.
P: ¿Cuál es el límite de tamaño del texto?
R: El patrón acepta hasta 10 KB. El texto de prueba acepta hasta 1 MB. El número máximo de coincidencias devueltas es 1 000.
P: ¿Qué es un grupo de captura nombrado?
R: Un grupo nombrado usa la sintaxis (?P<nombre>...) en RE2. Extrae una subcadena identificada por nombre en lugar de índice numérico. Resulta indispensable en patrones con varios grupos.
P: ¿RE2 es compatible con las regex de JavaScript?
R: Parcialmente. RE2 soporta clases de caracteres, cuantificadores y grupos. No soporta lookahead, lookbehind, backreferences ni cuantificadores posesivos.
P: ¿Los datos se conservan?
R: No. Tu patrón y tu texto se envían a la API CaptainDNS para procesamiento. Se eliminan inmediatamente después. Ningún contenido se almacena ni se registra.
Herramientas complementarias
| Herramienta | Utilidad |
|---|---|
| Hash Generator | Calcula el hash de un texto coincidente con tu regex |
| Codificador/decodificador Base64 | Decodifica un texto Base64 antes de probarlo con una regex |
| Codificador/decodificador URL | Decodifica URLs codificadas antes de la extracción regex |
| Convertidor de mayúsculas | Normaliza las mayúsculas de un texto antes de probarlo |
| Inspector SPF | Verifica los registros SPF que validas por regex |
Recursos útiles
- RE2 syntax reference (sintaxis completa del motor RE2)
- RFC 7208 - SPF (formato de los registros SPF verificables por regex)
- Regular-Expressions.info (tutorial completo sobre expresiones regulares)
Compromiso de privacidad
Tu patrón y tu texto se envían a la API CaptainDNS únicamente para ejecutar el test regex. Ningún contenido se conserva tras el procesamiento. Solo se registran métricas técnicas anónimas: tamaño del patrón, número de coincidencias y duración de la ejecución.