Chuleta
| Token | Coincide con |
|---|---|
| . | Cualquier carácter salvo salto de línea (con el flag s: cualquier carácter) |
| \d \w \s | Dí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) |
| \b | Lí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|b | Alternancia |
| (?=x) (?!x) (?<=x) (?<!x) | Lookahead, lookahead negativo, lookbehind, lookbehind negativo |
| \1 | Referencia 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
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.