## Cheat Sheet de Expresiones Regulares (Regex) para Linux
Para una navegación sencilla, un índice de las secciones de la página:
- [Caracteres](#chars)
- [Cuantificadores](#quantifiers)
- [Más Caracteres](#morechars)
- [Lógica](#logic)
- [Espacios en Blanco](#whitespace)
- [Más Cuantificadores](#morequants)
- [Clases de Caracteres](#classes)
- [Anclajes y Límites](#anchors)
- [Clases POSIX](#posix)
- [Modificadores en Línea](#modifiers)
- [Lookaheads y Lookbehinds](#lookarounds)
- [Operaciones con Clases de Caracteres](#classoperations)
- [Otra Sintaxis](#other)
## Caracteres
| Carácter | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| -------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------------------- |
| `\d` | La mayoría de los motores: un dígito del 0 al 9 | `file_\d\d` | `file_25` |
| `\w` | La mayoría de los motores: "carácter de palabra": letra ASCII, dígito o guión bajo | `\w-\w\w\w` | `A-b_1` |
| `\s` | La mayoría de los motores: "carácter de espacio en blanco": espacio, tabulación, salto de línea, retorno de carro, tabulación vertical | `a\sb\sc` | `a b c` |
| `\D` | Un carácter que no es un dígito según el `\d` del motor | `\D\D\D` | `ABC` |
| `\W` | Un carácter que no es un carácter de palabra según el `\w` del motor | `\W\W\W\W\W` | `*-+=)` |
| `\S` | Un carácter que no es un carácter de espacio en blanco según el `\s` del motor | `\S\S\S\S` | `Yoyo` |
## Cuantificadores
| Cuantificador | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ------------- | ---------------------- | ---------------- | ----------------------- |
| `+` | Una o más veces | `Versión \w-\w+` | `Versión A-b1_1` |
| `{3}` | Exactamente tres veces | `\D{3}` | `ABC` |
| `{2,4}` | De dos a cuatro veces | `\d{2,4}` | `156` |
| `{3,}` | Tres o más veces | `\w{3,}` | `tutorial_de_regex` |
| `*` | Cero o más veces | `A*B*C*` | `AAACC` |
| `?` | Una vez o ninguna | `plurales?` | `plural` |
## Más Caracteres
| Carácter | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| -------- | ---------------------------------------------------- | ----------------------- | ----------------------- |
| `.` | Cualquier carácter excepto salto de línea | `a.c` | `abc` |
| `\.` | Un punto (carácter especial: debe escaparse con `\`) | `a\.c` | `a.c` |
| `\\` | Escapa un carácter especial | `\\.*\\+\\?\\$^\\/\\\\` | `.*+?$^/\\` |
| `[...]` | Uno de los caracteres entre corchetes | `[AEIOU]` | Una vocal mayúscula |
| `[^...]` | Uno de los caracteres que no está en los corchetes | `[^a-z]{3}` | `A1!` |
## Lógica
| Lógica | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| --------- | ------------------------- | ------------------------------- | ------------------------ |
| `\|` | Alternancia / Operador OR | `22\|33` | `33` |
| `( … )` | Grupo de captura | `A(nt\|pple)` | `Apple` (captura "pple") |
| `\\1` | Contenido del Grupo 1 | `r(\\w)g\\1x` | `regex` |
| `\\2` | Contenido del Grupo 2 | `(\\d\\d)\\+(\\d\\d)=\\2\\+\\1` | `12+65=65+12` |
| `(?: … )` | Grupo no capturador | `A(?:nt\|pple)` | `Apple` |
## Más Espacios en Blanco
| Carácter | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------------------- |
| `\t` | Tabulación | `T\\t\\w{2}` | `T ab` |
| `\r` | Carácter de retorno de carro | Ver abajo | |
| `\n` | Carácter de salto de línea | Ver abajo | |
| `\r\n` | Separador de línea en Windows | `AB\\r\\nCD` | `AB
CD` |
| `\N` | Perl, PCRE (C, PHP, R…): un carácter que no es un salto de línea | `\\N+` | `ABC` |
| `\h` | Perl, PCRE (C, PHP, R…), Java: un carácter de espacio horizontal: tabulación o separador de espacio Unicode | | |
| `\H` | Un carácter que no es un espacio horizontal | | |
| `\v` | .NET, JavaScript, Python, Ruby: tabulación vertical | | |
| `\v` | Perl, PCRE (C, PHP, R…), Java: un carácter de espacio vertical: salto de línea, retorno de carro, tabulación vertical, avance de página, separador de párrafo o línea | | |
| `\V` | Perl, PCRE (C, PHP, R…), Java: cualquier carácter que no sea un espacio vertical | | |
| `\R` | Perl, PCRE (C, PHP, R…), Java: un salto de línea (par de retorno de carro + salto de línea, y todos los caracteres coincidentes con \v) | | |
## Más Cuantificadores
| Cuantificador | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ------------- | --------------------------------------------- | ----------- | ----------------------- |
| `+` | Una o más veces | `\\d+` | `12345` |
| `?` | Hace que los cuantificadores sean "perezosos" | `\\d+?` | `1` en `12345` |
| `*` | Cero o más veces | `A*` | `AAA` |
| `?` | Hace que los cuantificadores sean "perezosos" | `A*?` | Vacío en `AAA` |
| `{2,4}` | De dos a cuatro veces | `\\w{2,4}` | `abcd` |
| `?` | Hace que los cuantificadores sean "perezosos" | `\\w{2,4}?` | `ab` en `abcd` |
## Clases de Caracteres
| Carácter | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| -------- | ------------------------------------------------------------------------------------- | ---------------- | -------------------------------------------------------------------------------- |
| `[ … ]` | Uno de los caracteres entre corchetes | `[AEIOU]` | Una vocal mayúscula |
| `[ … ]` | Uno de los caracteres entre corchetes | `T[ao]p` | `Tap` o `Top` |
| `-` | Indicador de rango | `[a-z]` | Una letra minúscula |
| `[x-y]` | Uno de los caracteres en el rango de x a y | `[A-Z]+` | `GREAT` |
| `[ … ]` | Uno de los caracteres entre corchetes | `[AB1-5w-z]` | Uno de: A, B, 1, 2, 3, 4, 5, w, x, y, z |
| `[x-y]` | Uno de los caracteres en el rango de x a y | `[ -~]+` | Caracteres en la sección imprimible de la tabla ASCII |
| `[^x]` | Un carácter que no es x | `[^a-z]{3}` | `A1!` |
| `[^x-y]` | Uno de los caracteres que no está en el rango de x a y | `[^ -~]+` | Caracteres que no están en la sección imprimible de la tabla ASCII |
| `[\d\D]` | Un carácter que es un dígito o no es un dígito | `[\d\D]+` | Cualquier carácter, incluyendo saltos de línea, que el punto regular no coincide |
| `[\x41]` | Coincide con el carácter en la posición hexadecimal 41 en la tabla ASCII, es decir, A | `[\x41-\x45]{3}` | `ABE` |
## Anclajes y Límites
| Anclaje | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------- | ---------------------------------- |
| `^` | inicio de línea según el modo multilinea. (Pero cuando [^dentro de corchetes], significa "no") | `^abc .*` | `abc` (inicio de línea) |
| `$` | final de línea según el modo multilinea. Muchas sutilezas dependientes del motor. | `.*? el fin$` | `este es el fin` |
| `\A` | Inicio de cadena (todos los motores principales excepto JS) | `\Aabc[\d\D]*` | `abc` (inicio de cadena) |
| `\z` | Fin de cadena muy al final de la cadena. No disponible en Python y JS | `el fin\z` | `esto es...
...el fin` |
| `\Z` | Final de cadena o (excepto Python) antes del salto de línea final. No disponible en JS | `el fin\Z` | `esto es...
...el fin\n` |
| `\G` | Inicio de Cadena o Final de Coincidencia Anterior
.NET, Java, PCRE (C, PHP, R…), Perl, Ruby | | |
| `\b` | Límite de palabra La mayoría de los motores: posición en la que solo un lado es una letra ASCII, un dígito o un guión bajo | `Bob.*\bcat\b` | `Bob comió al gato` |
| `\b` | Límite de palabra .NET, Java, Python 3, Ruby: posición en la que solo un lado es una letra Unicode, un dígito o un guión bajo | `Bob.*\b\кошка\b` | `Bob comió al кошка` |
| `\B` | No es un límite de palabra | `c.*\Bcat\B.*` | `imitadores` |
## Clases POSIX
| Carácter | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ----------- | --------------------------------------------------- | ----------------- | ----------------------- |
| `[:alpha:]` | PCRE (C, PHP, R…): letras ASCII A-Z y a-z | `[8[:alpha:]]+` | `BienHecho88` |
| `[:alpha:]` | Ruby 2: letra Unicode o ideograma | `[:alpha:]\d]+` | `кошка99` |
| `[:alnum:]` | PCRE (C, PHP, R…): dígitos y letras ASCII A-Z y a-z | `[[:alnum:]]{10}` | `ABCDE12345` |
| `[:alnum:]` | Ruby 2: dígito, letra o ideograma Unicode | `[[:alnum:]]{10}` | `кошка90210` |
| `[:punct:]` | PCRE (C, PHP, R…): signo de puntuación ASCII | `[[:punct:]]+` | `?!.,:;` |
| `[:punct:]` | Ruby: signo de puntuación Unicode | `[[:punct:]]+` | `‽,:〽⁆` |
## Modificadores en Línea
Ninguno de estos es compatible con JavaScript. En Ruby, ten cuidado con (?s) y (?m).
| Modificador | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| `(?i)` | Modo insensible a mayúsculas y minúsculas
(excepto JavaScript) | `(?i)Lunes` | `lunES` |
| `(?s)` | Modo DOTALL (excepto JS y Ruby). El punto (.) coincide con caracteres de nueva línea (\r\n). También conocido como "modo de línea única" porque el punto trata la entrada completa como una sola línea | `(?s)Desde A.*hasta Z` | `Desde A
hasta Z` |
| `(?m)` | Modo multilinea (excepto Ruby y JS) ^ y $ coinciden al principio y al final de cada línea | `(?m)1\r\n^2$\r\n^3$` | `1
2
3` |
| `(?m)` | En Ruby: lo mismo que (?s) en otros motores, es decir, modo DOTALL, es decir, el punto coincide con saltos de línea | `(?m)Desde A.*hasta Z` | `Desde A
hasta Z` |
| `(?x)` | Modo de espaciado libre (excepto JavaScript). También conocido como modo de comentario o modo de espacio en blanco | `(?x) # este es un
# comentario
abc # escribir en varias
# líneas
[ ]d # los espacios deben estar
# en corchetes` | `abc d` |
| `(?n)` | .NET, PCRE 10.30+: solo captura con nombre | Convierte todos los (paréntesis) en grupos de no captura. Para capturar, usa grupos con nombre. | |
| `(?d)` | Java: solo saltos de línea de Unix | El punto y los anclajes ^ y $ solo se ven afectados por \n | |
| `(?^)` | PCRE 10.32+: desactiva modificadores | Desactiva los modificadores ismnx | |
## Búsquedas Adelante y Atrás
| Búsqueda | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| -------- | -------------------------- | ------------------- | ---------------------------- |
| `(?=…)` | Búsqueda positiva adelante | `(?=\d{10})\d{5}` | `01234` en 0123456789 |
| `(?<=…)` | Búsqueda positiva atrás | `(?<=\d)gato` | `gato` en 1gato |
| `(?!…)` | Búsqueda negativa adelante | `(?!teatro)el\w+` | `tema` |
| `(?\d)\s+(?\d)` | `2` en `1 2 3` |
## Grupos Condicionales
| Grupo Condicional | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------- | ----------------------- |
| `(?(?=…) | )` | Si la expresión adelante coincide, entonces coincide con el grupo vacío. De lo contrario, no hace nada. | `(?(?=1)\d | -)` | `1` |
| `(?(1)a | b)` | Si el grupo 1 coincide, coincide con "a". De lo contrario, coincide con "b". | `(\d)(?(1)\d | -)` | `12-` |
## Comprobación de Cadenas
| Comprobación de Cadena | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ---------------------- | ------- | ------------------------------------------------------------------- | ----------------------- |
| `(?(1)a | b)` | Si 1 coincide, coincide con "a". De lo contrario, coincide con "b". | `(?(\d)\d | -)` | `12-` |
## Modificadores en Línea
Estos solo son compatibles con Perl. Los modos x, d, s y m afectan a toda la expresión. Los modos i y U solo afectan a las partes específicas. Si se combinan, aparece la nube de puntos.
| Modificador | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ------------ | ---------------------------- | ---------------------- | ----------------------- |
| (?imsx-imsx) | Activa y desactiva los modos | (?i)hola(?-i) hola(?i) | hola hola |
## Átomos Predefinidos
| Átomo Predefinido | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------- |
| `.` | Coincide con cualquier carácter excepto un salto de línea. Si se activa el modo /s, también coincide con saltos de línea | `(?s)` | `hola\nmundo` |
| `\w` | Coincide con una letra ASCII, un dígito o un guión bajo (equivale a [a-zA-Z0-9_]) | `\w{5}` | `alpha` |
| `\W` | Coincide con cualquier carácter que no sea una letra ASCII, un dígito o un guión bajo (equivale a [^a-zA-Z0-9_]) | `\W{5}` | `!@#$%` |
| `\s` | Coincide con un espacio en blanco (espacio, tabulación, salto de línea, retorno de carro, avance de página, espacio de línea, espacio en blanco sin separar, espacio ideográfico) | `\s\s` | ` ` |
| `\S` | Coincide con cualquier carácter que no sea un espacio en blanco | `\S\S` | `12` |
| `\d` | Coincide con un dígito (equivale a [0-9]) | `\d{3}` | `123` |
| `\D` | Coincide con cualquier carácter que no sea un dígito | `\D{3}` | `abc` |
| `\b` | Coincide con un límite de palabra | `\bcat\b` | `el gato` |
| `\B` | Coincide con cualquier posición que no sea un límite de palabra | `\Bcat\B` | `imitadores` |
| `(?i)` | Modo insensible a mayúsculas y minúsculas | `(?i)ABC` | `abc` |
| `(?s)` | Modo DOTALL. El punto (.) coincide con cualquier carácter, incluido un salto de línea (\n) | `(?s)a.b` | `a\nb` |
| `(?m)` | Modo multilinea. ^ y $ coinciden con el inicio y el final de cada línea | `(?m)^abc$` | `abc` en `abc
def` |
| `(?x)` | Modo de espaciado libre. Ignora los espacios en blanco y los comentarios | `(?x) ab c` | `abc` |
| `(?n)` | Solo captura con nombre | `(?(?=d)d | D)` | `d` |
| `(?^)` | Desactiva los modificadores | `(?i)(?^i)abc` | `abc` |
| `(?=…)` | Búsqueda positiva adelante | `a(?=b)` | `a` en `ab` |
| `(?<=…)` | Búsqueda positiva atrás | `(?<=a)b` | `b` en `ab` |
| `(?!…)` | Búsqueda negativa adelante | `a(?!b)` | `a` en `ac` |
| `(?\d)\s+(?\d)` | `2` en `1 2 3` |
## Ejemplos de Búsqueda
| Ejemplo de Búsqueda | Leyenda | Ejemplo | Coincidencia de Ejemplo |
| ------------------------- | -------------------------------------------------------------- | ----------------------------- | -------------------------------------------------------------------- |
| `[A-Za-z]` | Cualquier letra en mayúscula o minúscula | `[A-Za-z]` | `A` en `Apple` |
| `\d{3}` | Tres dígitos | `\d{3}` | `123` en `12345` |
| `(gato | perro)` | Coincide con "gato" o "perro" | `(gato | perro)` | `gato` en `gato y perro` |
| `^Inicio` | Coincide con "Inicio" al principio de la cadena o de una línea | `^Inicio` | `Inicio` en `Inicio del día` |
| `Final$` | Coincide con "Final" al final de la cadena o de una línea | `Final$` | `Final` en `El Final` |
| `.*` | Cualquier carácter 0 o más veces | `.*` | `Hola Mundo!` |
| `\b\w+\b` | Cualquier palabra completa | `\b\w+\b` | `Hola` en `Hola Mundo!` |
| `(?>patrón)` | Patron no capturado | `(?>patrón)` | Coincidencia completa |
| `(?=adelante)` | Búsqueda positiva adelante | `(?=adelante)` | Coincide en la posición antes de "adelante" |
| `(?<=atrás)` | Búsqueda positiva atrás | `(?<=atrás)` | Coincide en la posición después de "atrás" |
| `(?!no adelante)` | Búsqueda negativa adelante | `(?!no adelante)` | Coincide en cualquier posición que no esté seguida por "no adelante" |
| `(?`def` en `abc`
`def` |
| `(?m)^Inicio` | Coincide con "Inicio" al principio de una línea | `(?m)^Inicio` | `Inicio` en `Inicio del día` |
| `(?x) hola mundo ` | Ignora espacios en blanco y comentarios | `(?x) hola mundo ` | `holamundo` |
| `(?(?=condición)verdadero | falso)` | Grupos condicionales | `(?(?=1)d | D)` | `d` |
| `(?(1)a | b)` | Grupos condicionales | `(a)(?(1)b | c)` | `b` |
| `(?(\d)\d | -)` | Comprobación de cadena | `(?(\d)\d | -)` | `1` |
| `\p{Lu}` | Coincide con una letra en mayúsculas Unicode | `\p{Lu}` | `Á` en `Ábaco` |
| `\p{IsGreek}` | Coincide con un carácter en el bloque Unicode "Greek" | `\p{IsGreek}` | `α` en `αΒΓ` |
| `\p{Latin}` | Coincide con un carácter en el script Unicode "Latin" | `\p{Latin}` | `a` en `abcde` |
| `\p{InGreek}` | Coincide con un carácter en el bloque Unicode "Greek" | `\p{InGreek}` | `Δ` en `ΔΕΛΤΑ` |
| `\p{IsBasicLatin}` | Coincide con un carácter en el bloque Unicode "Basic Latin" | `\p{IsBasicLatin}` | `a` en `Ⅲ` |
| `\.` | Coincide con un punto literal | `\.` | `.` en `www.example.com` |
| `\w{4}` | Cuatro caracteres de palabra | `\w{4}` | `jump` en `jump over` |
| `\W{3}` | Tres caracteres que no son de palabra | `\W{3}` | `@#$` en `@#$%!` |
| `\s\s` | Dos espacios en blanco | `\s\s` | ` ` en `Hello World` |
| `\S\S` | Dos caracteres que no son espacios en blanco | `\S\S` | `He` en `Hello World` |
| `\d{2,4}` | Dos a cuatro dígitos | `\d{2,4}` | `123` en `12345` |
| `a*` | Cero o más "a" | `a*` | `aaa` en `aaabbb` |
| `b+` | Una o más "b" | `b+` | `bbb` en `aaabbb` |
| `c?` | Cero o un "c" | `c?` | `c` en `abc` |
| `(a | b)` | "a" o "b" | `(a | b)` | `a` en `abc` |
| `(a | b | c)` | "a", "b" o "c" | `(a | b | c)` | `b` en `abc` |
| `(abc)+` | "abc" una o más veces | `(abc)+` | `abcabc` en `abcabcabc` |
| `[aeiou]` | Cualquier vocal | `[aeiou]` | `e` en `hello` |
| `[A-Za-z]` | Cualquier letra en mayúscula o minúscula | `[A-Za-z]` | `H` en `Hello` |
| `[^0-9]` | Cualquier carácter que no sea un dígito | `[^0-9]` | `H` en `H3llo` |
| `(?!no)` | Búsqueda negativa adelante | `(?!no)` | `ha` en `hasta` |
| `(?<=pre)` | Búsqueda positiva atrás | `(?<=pre)` | `post` en `prepost` |
| `(?i)abc` | Coincide de manera insensible a mayúsculas y minúsculas | `(?i)abc` | `ABC` o `abc` |
| `(?s)h.b` | El punto coincide con saltos de línea | `(?s)h.b` | `h\nb` en `h\nb` |
| `(?x) hola mundo ` | Ignora espacios en blanco y comentarios | `(?x) hola mundo ` | `holamundo` |
| `(?(\d)\d | -)` | Comprobación de cadena | `(?(\d)\d | -)` | `1` |
| `(?<=antes)b` | Búsqueda positiva atrás | `(?<=antes)b` | `b` en `antesb` |
| `\b\w+\b` | Palabra completa | `\b\w+\b` | `Hola` en `¡Hola Mundo!` |
| `\B!\B` | Posición que no es un límite de palabra | `\B!\B` | `!` en `Hola!Mundo` |
| `(?i)(?^i)abc` | Desactiva modificadores | `(?i)(?^i)abc` | `abc` en `ABC` |
| `(?i)mayusculas` | Coincide de manera insensible a mayúsculas y minúsculas | `(?i)mayusculas` | `MAYUSCULAS` o `mayusculas` |
| `(?s)abc.def` | El punto coincide con saltos de línea | `(?s)abc.def` | `abc`
`def` en `abc`
`def` |
| `(?m)^Inicio` | Coincide con "Inicio" al principio de una línea | `(?m)^Inicio` | `Inicio` en `Inicio del día` |
| `(?x) hola mundo ` | Ignora espacios en blanco y comentarios | `(?x) hola mundo ` | `holamundo` |
| `(?(?=condición)verdadero | falso)` | Grupos condicionales | `(?(?=1)d | D)` | `d` |
| `(?(1)a | b)` | Grupos condicionales | `(a)(?(1)b | c)` | `b` |
| `(?(\d)\d | -)` | Comprobación de cadena | `(?(\d)\d | -)` | `1` |
| `\p{Lu}` | Letra en mayúsculas Unicode | `\p{Lu}` | `Á` en `Ábaco` |
| `\p{IsGreek}` | Bloque Unicode | `\p{IsGreek}` | `α` en `αΒΓ` |
| `\p{Latin}` | Carácter en el script Unicode "Latin" | `\p{Latin}` | `a` en `abcde` |
| `\p{InGreek}` | Carácter en el bloque Unicode "Greek" | `\p{InGreek}` | `Δ` en `ΔΕΛΤΑ` |
| `\p{IsBasicLatin}` | Carácter en el bloque Unicode "Basic Latin" | `\p{IsBasicLatin}` | `a` en `Ⅲ` |