Preguntas
¿Dónde puedo probar un patrón?
El probador de regex resalta las coincidencias en vivo, lista los grupos, previsualiza un reemplazo y explica el patrón token a token.
La sintaxis que comparten todos los motores habituales, con las diferencias en una tabla al final.
| ^ $ | inicio / fin del texto (de la línea con el flag m) |
| \A \z \Z | inicio / fin del texto sea cual sea el flag (no en JS) |
| \b \B | límite de palabra / no límite |
| . | cualquier carácter salvo salto de línea (cualquiera con el flag s) |
| \d \w \s | dígito, carácter de palabra, espacio; \D \W \S niegan |
| [abc] [a-z] [^abc] | conjunto, rango, conjunto negado |
| [\]\\^-] | dentro de un conjunto solo ] \ ^ - necesitan escape |
| \t \n \r \xHH \uHHHH | tab, salto de línea, CR, hex, Unicode |
| \p{L} \p{Lu} \p{N} \p{Script=Cyrillic} | propiedades Unicode (flag u en JS) |
| [[:alpha:]] [[:digit:]] | clases POSIX (grep, PCRE; no JS) |
| \. \* \( \\ | metacarácter escapado = literal |
| * + ? | 0+, 1+, 0 o 1 |
| {n} {n,} {n,m} | exactamente, al menos, entre |
| *? +? ?? {n,m}? | perezoso: lo menos posible |
| *+ ++ ?+ | posesivo: sin backtracking (PCRE, Java) |
| (abc) | captura, numerado desde 1 |
| (?:abc) | sin captura |
| (?<name>abc) | con nombre (Python: (?P<name>…)) |
| \1 \k<name> | referencia hacia atrás (Python: (?P=name)) |
| a|b | alternancia (la menor precedencia) |
| (?>abc) | grupo atómico (PCRE, Java) |
| (?i)abc (?i:abc) | flag en línea, flag en línea con alcance |
| (?=x) | seguido de x |
| (?!x) | no seguido de x |
| (?<=x) | precedido de x |
| (?<!x) | no precedido de x |
| g | todas las coincidencias (JS, PHP mediante función) |
| i | ignorar mayúsculas |
| m | ^ $ coinciden en los saltos de línea |
| s | . coincide con salto de línea (DOTALL) |
| x | ignorar espacios y comentarios # en el patrón (PCRE, Python; no JS) |
| u | Unicode (JS); necesario para \p{} |
| y | sticky (JS) |
| $1 $<name> $& | JS, .NET: grupo, con nombre, coincidencia completa |
| \1 \g<name> | Python re.sub |
| $1 \1 ${name} | PCRE / PHP preg_replace; Go usa $1 y ${name} |
| sed 's/(a)(b)/\2\1/' | sed -E (el sed básico necesita \( \)) |
| ^\s*$ | línea en blanco |
| \s+$ | espacios al final de línea |
| \b(?:\d{1,3}\.){3}\d{1,3}\b | IPv4 (aproximada) |
| [\w.+-]+@[\w-]+(?:\.[\w-]+)+ | correo (práctico) |
| https?://[^\s"'<>]+ | URL |
| \d{4}-\d{2}-\d{2} | fecha ISO |
| #(?:[0-9a-fA-F]{3}){1,2}\b | color hex |
| "(?:[^"\\]|\\.)*" | cadena entre comillas dobles con escapes |
| ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$ | contraseña con dígito, minúscula, mayúscula, 8+ |
| (\w+)\s+\1 | palabra repetida |
| JavaScript | sin \A \z, sin flag x, sin posesivos/atómicos; lookbehind sí; grupos con nombre (?<n>) |
| PCRE (PHP, nginx, HAProxy) | todo; delimitadores /…/ en PHP |
| Python re | (?P<n>), sin posesivos antes de 3.11, \Z = fin |
| Go RE2, Rust regex | tiempo lineal; sin lookaround, sin referencias hacia atrás |
| grep -E / sed -E | ERE: sin \d (usa [0-9]), clases POSIX, sin cuantificadores perezosos |
| grep (básico) | \( \) \{ \} \+ \? escapados para ser especiales |
| Java | posesivos, atómicos; las cadenas necesitan barras invertidas dobles |
Los resultados y mensajes de esta herramienta se muestran en inglés.
El probador de regex resalta las coincidencias en vivo, lista los grupos, previsualiza un reemplazo y explica el patrón token a token.