bitlvl
ES

Probador de regex

Escribe un patrón y los flags, pega el texto donde buscar. Las coincidencias se iluminan mientras escribes, cada grupo se lista y el patrón se explica pieza a pieza.

//

Coincidencias

Reemplazar

 

Explicación

Los resultados y mensajes de esta herramienta se muestran en inglés.

Chuleta

TokenCoincide con
.Cualquier carácter salvo salto de línea (con el flag s: cualquier carácter)
\d \w \sDígito; carácter de palabra [A-Za-z0-9_]; espacio en blanco. En mayúscula niegan: \D \W \S
[abc] [^abc] [a-z]Clase de caracteres, clase negada, rango
^ $Inicio y fin de la entrada (de cada línea con el flag m)
\bLímite de palabra
* + ? {n} {n,} {n,m}0 o más, 1 o más, 0 o 1, exactamente n, n o más, de n a m
*? +? ??Versiones perezosas (la más corta)
(abc)Grupo de captura, numerado desde 1
(?<name>abc)Grupo con nombre, referenciado como \k<name> y $<name>
(?:abc)Grupo sin captura
a|bAlternancia
(?=x) (?!x) (?<=x) (?<!x)Lookahead, lookahead negativo, lookbehind, lookbehind negativo
\1Referencia al grupo 1
\p{L} \p{Script=Cyrillic}Propiedad Unicode (necesita el flag u)

Flags

g encontrar todas las coincidencias, no solo la primera; i ignorar mayúsculas; m hacer que ^ y $ coincidan en los saltos de línea; s dejar que . coincida con saltos de línea; u modo Unicode (necesario para \p{…} y para manejar correctamente los emoji); y sticky, coincidir solo en lastIndex.

Dialectos

Este probador usa el motor de JavaScript. La sintaxis de arriba la comparte con PCRE (PHP, nginx, HAProxy), el re de Python y Java para casi todo lo que escribirás; las diferencias están en los bordes: Python nombra los grupos (?P<name>…), el RE2 de Go y grep -E no tienen lookbehind ni referencias hacia atrás, y las clases POSIX como [[:digit:]] no son JavaScript. Los grupos atómicos y los cuantificadores posesivos solo existen en PCRE y Java.

Patrones habituales

Dirección IPv4 (aproximada)
\b(?:\d{1,3}\.){3}\d{1,3}\b
Correo (práctico)
[\w.+-]+@[\w-]+(?:\.[\w-]+)+
Fecha ISO
(?<y>\d{4})-(?<m>0[1-9]|1[0-2])-(?<d>0[1-9]|[12]\d|3[01])
Color hex
#(?:[0-9a-f]{3}){1,2}\b
Quitar espacios al final de línea
[ \t]+$ (flags gm, reemplazar por nada)

Preguntas

¿Por qué mi patrón solo coincide una vez?

Sin el flag g, una regex encuentra solo la primera coincidencia. Añade g para encontrarlas todas. En código, usa matchAll, re.findall o preg_match_all para el mismo efecto.

¿Por qué .* coincide con demasiado?

Los cuantificadores son voraces: .* toma todo lo que puede y solo retrocede si el resto falla. Usa .*? para la coincidencia más corta, o una clase negada como [^"]*, que es más rápida y más clara.

¿Cómo hago coincidir un punto o un corchete literal?

Escápalo con una barra invertida: \. \[ \( \\. La herramienta de escape de cadenas tiene un modo regex que escapa un literal entero por ti.

¿Qué es el backtracking catastrófico?

Los cuantificadores anidados como (a+)+ sobre una entrada que no coincide hacen que el motor pruebe un número exponencial de caminos y se cuelgue. Evita anidar cuantificadores sobre conjuntos solapados, usa grupos posesivos o atómicos donde el motor los tenga, o usa RE2 (Go, regex de Rust), que garantiza tiempo lineal.