Curso básico de Expresiones Regulares (REGEX) y Procesamiento de Lenguaje Natural (NLP) en español
| Caracter | Desc | Ejemplo | Match |
|---|---|---|---|
| \d | Un dígito entre 0 y 9 | file_\d\d | file_25 |
| \d | .NET, Python 3: Un dígito Unicode en cualquier escritura | file_\d\d | file_9੩ |
| \w | “caracter de palabra”: Letra ASCII, dígito o guión bajo | \w-\w\w\w | A-b_1 |
| \w | .Python 3: “Caracter de palabra”: Letra Unicode, ideograma, dígito, o guión bajo | \w-\w\w\w | 字-ま_۳ |
| \w | .NET: “Caracter de palabra”: Letra Unicode, ideograma, dígito, o conector | \w-\w\w\w | 字-ま‿۳ |
| \s | “Caracter de espacio en blanco”: espacio, tab, nueva línea, retorno de carro, tab vertical | a\sb\sc | a b c |
| \s | .NET, Python 3, JavaScript: “Caracter de espacio en blanco”: cualquier separador Unicode | a\sb\sc | a b c |
| \D | Un caracter que no sea un dígito según esté definido \d | \D\D\D | ABC |
| \W | Un caracter que no sea un caracter de palabra según esté definido \w | \W\W\W\W\W | *-+=) |
| \S | Un caracter que no sea un caracter de espacio en blanco según esté definido \s | \S\S\S\S | Yoyo |
| Cuantificador | Desc | Ejemplo | Match |
|---|---|---|---|
| + | Uno o más | Version \w-\w+ | Version A-b1_1 |
| {3} | Exactamente tres veces | \D{3} | ABC |
| {2,4} | Dos o cuatro veces | \d{2,4} | 156 |
| {3,} | Tres o más veces | \w{3,} | regex_tutorial |
| * | Cero o más veces | A*B*C* | AAACC |
| ? | Una vez o ninguna | libros? | libro |
| Caracter | Desc | Ejemplo | Match |
|---|---|---|---|
| . | Cualquier caracter excepto salto de línea | a.c | abc |
| . | Cualquier caracter excepto salto de línea | .* | whatever, man. |
| \. | Un punto (Caracter especial: debe ser escapado con un \) | a\.c | a.c |
| \ | Escapa un caracter especial | \.\*\+\?\$\/\\ | .*+?$\/\ |
| \ | Escapa un caracter especial | \[\{\(\)\}\] | [{()}] |
| Lógico | Desc | Ejemplo | Match | |
|---|---|---|---|---|
| | | Opciones / operando OR | 22|33 | 33 | |
| ( … ) | Capturar grupo | 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 que no es capturado | A(?:nt | pple) | Apple |
| Caracter | Desc | Ejemplo | Match |
|---|---|---|---|
| \t | Tab | T\t\w{2} | T ab |
| \r | Caracter de retorno de carro | ver abajo | |
| \n | Caracter de nueva linea | ver abajo | |
| \r\n | Separador de nueva linea en Windows | AB\r\nCD | AB CD |
| \N | Perl, PCRE (C, PHP, R…): Un caracter que no es un salto de línea | \N+ | ABC |
| \h | Perl, PCRE (C, PHP, R…), Java: un caracter de espacio en blanco horizontal: tab o un separador de espacio Unicode | ||
| \H | Un caracter que no es de espacio en blanco horizontal | ||
| \v | .NET, JavaScript, Python, Ruby: tab vertical | ||
| \v | Perl, PCRE (C, PHP, R…), Java: un caracter de espacio en blanco vertical: salto de línea, retorno de carro, tab vertical, envío de formulario, párrafo o separador de línea | ||
| \V | Perl, PCRE (C, PHP, R…), Java: Cualquier caracter que no sea de espacio en blanco vertical | ||
| \R | Perl, PCRE (C, PHP, R…), Java: Un salto de línea (el par retorno de carro + salto de línea, y todos los caracteres que coincidan con \v) |
| Cuantificador | Desc | Ejemplo | Match |
|---|---|---|---|
| + | El + (uno o más) es “codicioso” | \d+ | 12345 |
| ? | Hace los cuantificadores “perezosos” | \d+? | 1 en 12345 |
| * | El * (cero o más) es “codicioso” | A* | AAA |
| ? | Hace los cuantificadores “perezosos” | A*? | vacío en AAA |
| {2,4} | Dos a cuatro veces, “codicioso” | \w{2,4} | abcd |
| ? | Hace los cuantificadores “perezosos” | \w{2,4}? | ab en abcd |
| Caracter | Desc | Ejemplo | Match |
|---|---|---|---|
| [ … ] | Uno de los caracteres entre los corchetes | [AEIOU] | Una vocal mayúscula sin acento |
| [ … ] | Uno de los caracteres entre los corchetes | T[ao]p | Tap o Top |
| - | Range indicator | [a-z] | Una letra minúscula sin acento |
| [x-y] | Uno de los caracteres en el rango de x a y | [A-Z]+ | GREAT |
| [ … ] | Uno de los caracteres entre los corchetes | [AB1-5w-z] | Uno de los siguientes: A,B,1,2,3,4,5,w,x,y,z |
| [x-y] | Uno de los caracteres entre el rango de x a y | [ -~]+ | Caracteres en la sección imprimible de la tabla ASCII. |
| [^x] | Un caracter que no es x | [^a-z]{3} | A1! |
| [^x-y] | Uno de los caracteres que no está en en rango de x a y | [^ -~]+ | Caracteres que no están en la sección imprimible de la tabla ASCII. |
| [\d\D] | Un caracter que es un dígito o un no-dígito | [\d\D]+ | Cualquier caracter, uncluyendo nueva línea que el punto regular no hace coincidencia |
| [\x41] | Coincide con el caracter en la posición hexadecimal 41 de la tabla ASCII, p.ej. A | [\x41-\x45]{3} | ABE |
| Ancla | Desc | Ejemplo | Match |
|---|---|---|---|
| ^ | Start of string or start of line depending on multiline mode. (But when [^inside corchetes], it means “not”) | ^abc .* | abc (line start) |
| $ | End of string or end of line depending on multiline mode. Many engine-dependent subtleties. | .*? the end$ | this is the end |
| \A | Beginning of string (all major engines except JS) | \Aabc[\d\D]* | abc (string… …start) |
| \z | Very end of the string Not available in Python and JS | the end\z | this is…\n…the end |
| \Z | End of string or (except Python) antes del salto de línea final Not available in JS | the end\Z | this is…\n…the end\n |
| \G | Beginning of String or End of Previous Match .NET, Java, PCRE (C, PHP, R…), Perl, Ruby | ||
| \b | Word boundary. Position where one side only is an letra ASCII, dígito o guión bajo | Bob.*\bcat\b | Bob ate the cat |
| \b | Word boundary .NET, Java, Python 3, Ruby: position where one side only is a Letra Unicode, dígito o guión bajo | Bob.*\b\кошка\b | Bob ate the кошка |
| \B | Not a word boundary | c.\Bcat\B. | copycats |
None of these are supported in JavaScript. In Ruby, beware of (?s) and (?m).
| Modificador | Desc | Ejemplo | Match |
|---|---|---|---|
| (?i) | Case-insensitive mode (except JavaScript) | (?i)Monday | monDAY |
| (?s) | DOTALL mode (except JS and Ruby). The dot (.) matches new line characters (\r\n). Also known as “single-line mode” because the dot treats the entire input as a single line | (?s)From A.*to Z | From A to Z |
| (?m) | Multiline mode (except Ruby and JS) ^ and $ match at the beginning and end of every line | (?m)1\r\n^2$\r\n^3$ | 1 2 3 |
| (?m) | In Ruby: the same as (?s) in other engines, i.e. DOTALL mode, i.e. dot matches saltos de línea | (?m)From A.*to Z | From A to Z |
| (?x) | Free-Spacing Mode mode (except JavaScript). Also known as comment mode or whitespace mode | (?x) # this is a # comment abc # write on multiple # lines [ ]d # spaces must be # in corchetes |
abc d |
| Lookaround | Desc | Ejemplo | Match |
|---|---|---|---|
| (?=…) | Positive lookahead | (?=\d{10})\d{5} | 01234 in 0123456789 |
| (?!…) | Negative lookahead | (?!theatre)the\w+ | theme |
| (?<=…) | Positive lookbehind | (?<=\d)cat | cat in 1cat |
| (?<!…) | Negative lookbehind | \w{3}(?<!mon)ster | Munster |