bitlvl
ES

Chuleta de regex

La sintaxis que comparten todos los motores habituales, con las diferencias en una tabla al final.

Cabe en una página A4 / Letter en vertical; usa «Guardar como PDF» en el diálogo de impresión para conservar una copia.

Anclas y límites

^ $inicio / fin del texto (de la línea con el flag m)
\A \z \Zinicio / fin del texto sea cual sea el flag (no en JS)
\b \Blímite de palabra / no límite

Caracteres

.cualquier carácter salvo salto de línea (cualquiera con el flag s)
\d \w \sdí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 \uHHHHtab, 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

Cuantificadores

* + ?0+, 1+, 0 o 1
{n} {n,} {n,m}exactamente, al menos, entre
*? +? ?? {n,m}?perezoso: lo menos posible
*+ ++ ?+posesivo: sin backtracking (PCRE, Java)

Grupos

(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|balternancia (la menor precedencia)
(?>abc)grupo atómico (PCRE, Java)
(?i)abc (?i:abc)flag en línea, flag en línea con alcance

Lookaround (anchura cero)

(?=x)seguido de x
(?!x)no seguido de x
(?<=x)precedido de x
(?<!x)no precedido de x

Flags

gtodas las coincidencias (JS, PHP mediante función)
iignorar mayúsculas
m^ $ coinciden en los saltos de línea
s. coincide con salto de línea (DOTALL)
xignorar espacios y comentarios # en el patrón (PCRE, Python; no JS)
uUnicode (JS); necesario para \p{}
ysticky (JS)

Reemplazo

$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 \( \))

Patrones habituales

^\s*$línea en blanco
\s+$espacios al final de línea
\b(?:\d{1,3}\.){3}\d{1,3}\bIPv4 (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}\bcolor 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+\1palabra repetida

Diferencias entre dialectos

JavaScriptsin \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 regextiempo lineal; sin lookaround, sin referencias hacia atrás
grep -E / sed -EERE: sin \d (usa [0-9]), clases POSIX, sin cuantificadores perezosos
grep (básico)\( \) \{ \} \+ \? escapados para ser especiales
Javaposesivos, atómicos; las cadenas necesitan barras invertidas dobles

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

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.