Lenguaje de expresiones regulares - Referencia rápida

Una expresión regular es un modelo con el que el motor de expresiones regulares intenta buscar una coincidencia en el texto de entrada. Un modelo consta de uno o más literales de carácter, operadores o estructuras. Para obtener una breve introducción, consulte Expresiones regulares de .NET.

Cada sección de esta referencia rápida enumera una categoría determinada de caracteres, operadores y construcciones que puede usar para definir expresiones regulares.

Esta información también se proporciona en dos formatos que se pueden descargar e imprimir para facilitar su consulta:

Escapes de carácter

El carácter de barra diagonal inversa (\) en una expresión regular indica que el carácter que lo sigue es un carácter especial (como se muestra en la tabla siguiente) o que se debe interpretar literalmente. Para más información, consulte Escapes de carácter.

Carácter de escape Descripción Modelo Coincidencias
\a Coincide con un carácter de campana, \u0007. \a "\u0007" en "Error!" + '\u0007'
\b En una clase de caracteres, coincide con un retroceso, \u0008. [\b]{3,} "\b\b\b\b" en "\b\b\b\b"
\t Coincide con una tabulación, \u0009. (\w+)\t "item1\t", "item2\t" en "item1\titem2\t"
\r Coincide con un retorno de carro, \u000D. (\r no es equivalente al carácter de nueva línea, \n). \r\n(\w+) "\r\nThese" en "\r\nThese are\ntwo lines."
\v Coincide con una tabulación vertical, \u000B. [\v]{2,} "\v\v\v" en "\v\v\v"
\f Coincide con un avance de página, \u000C. [\f]{2,} "\f\f\f" en "\f\f\f"
\n Coincide con una nueva línea, \u000A. \r\n(\w+) "\r\nThese" en "\r\nThese are\ntwo lines."
\e Coincide con un escape, \u001B. \e "\x001B" en "\x001B"
\Nnn Usa la representación octal para especificar un carácter (nnn consta de dos o tres dígitos). \w\040\w "a b", "c d" en "a bc d"
\xNn Usa la representación hexadecimal para especificar un carácter (nn consta de exactamente dos dígitos). \w\x20\w "a b", "c d" en "a bc d"
\cX

\cx
Coincide con el carácter de control ASCII especificado por X o x, donde X o x es la letra del carácter de control. \cC "\x0003" en "\x0003" (Ctrl-C)
\uNnnn Coincide con un carácter Unicode usando la representación hexadecimal (exactamente cuatro dígitos, según representa nnnn). \w\u0020\w "a b", "c d" en "a bc d"
\ Cuando va seguido de un carácter que no se reconoce como un carácter de escape en esta y otras tablas de este tema, coincide con ese carácter. Por ejemplo, \* es igual que \x2Ay \. es igual que \x2E. Esto permite que el motor de expresiones regulares elimine la ambigüedad de los elementos del lenguaje (como * o ?) y los literales de carácter (representados por \* o \?). \d+[\+-x\*]\d+ "2+2" y "3*9" en "(2+2) * 3*9"

Clases de caracteres

Una clase de caracteres coincide con cualquiera de un juego de caracteres. Las clases de caracteres incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para más información, consulte Clases de caracteres.

Clase de carácter Descripción Modelo Coincidencias
[character_group] Coincide con cualquier carácter individual de character_group. De forma predeterminada, la coincidencia distingue entre mayúsculas y minúsculas. [ae] "a" en "gray"

"a", "e" en "lane"
[^character_group] Negación: coincide con cualquier carácter único que no esté en character_group. De forma predeterminada, los caracteres de grupo_caracteres distinguen entre mayúsculas y minúsculas. [^aei] "r", "g", "n" en "reign"
[Primero-Última] Intervalo de caracteres: coincide con cualquier carácter individual del intervalo de primero a último. [A-Z] "A", "B" en "AB123"
. Carácter comodín: coincide con cualquier carácter único excepto \n.

Para que coincida con un carácter de punto literal (. o \u002E), debe precederlo con el carácter de escape (\.).
a.e "ave" en "nave"

"ate" en "water"
\p{Nombre} Coincide con cualquier carácter individual de la categoría general Unicode o el bloque con nombre especificado por nombre. \p{Lu}

\p{IsCyrillic}
"C", "L" en "City Lights"

"Д", "Ж" en "ДЖem"
\P{Nombre} Coincide con cualquier carácter único que no esté en la categoría general Unicode o bloque con nombre especificado por nombre. \P{Lu}

\P{IsCyrillic}
"i", "t", "y" en "City"

"e", "m" en "ДЖem"
\w Coincide con cualquier carácter de palabra. \w "I", "D", "A", "1", "3" en "ID A1.3"
\W Coincide con cualquier carácter que no sea de palabra. \W " ", "." en "ID A1.3"
\s Coincide con cualquier carácter de espacio en blanco. \w\s "D " en "ID A1.3"
\S Coincide con cualquier carácter que no sea de espacio en blanco. \s\S " _" en "int __ctr"
\d Coincide con cualquier dígito decimal. \d "4" en "4 = IV"
\D Coincide con cualquier carácter distinto de un dígito decimal. \D " ", "=", " ", "I", "V" en "4 = IV"

Delimitadores

Los delimitadores, o aserciones atómicas de ancho cero, hacen que una coincidencia tenga éxito o no dependiendo de la posición actual en la cadena, pero no hacen que el motor avance por la cadena ni consuma caracteres. Los metacaracteres enumerados en la tabla siguiente son delimitadores. Para obtener más información, consulte Delimitadores.

Aserción Descripción Modelo Coincidencias
^ De forma predeterminada, la coincidencia debe comenzar al principio de la cadena; en el modo multilínea, debe comenzar al principio de la línea. ^\d{3} "901" en "901-333-"
$ De forma predeterminada, la coincidencia se debe producir al final de la cadena o antes de \n al final de la cadena; en el modo multilínea, se debe producir antes del final de la línea o antes de \n al final de la línea. -\d{3}$ "-333" en "-901-333"
\A La coincidencia se debe producir al principio de la cadena. \A\d{3} "901" en "901-333-"
\Z La coincidencia se debe producir al final de la cadena o antes de \n al final de la cadena. -\d{3}\Z "-333" en "-901-333"
\z La coincidencia se debe producir al final de la cadena. -\d{3}\z "-333" en "-901-333"
\G La coincidencia debe producirse en el punto en el que finalizó la coincidencia anterior, o si no había ninguna coincidencia anterior, en la posición de la cadena donde se inició la coincidencia. \G\(\d\) "(1)", "(3)", "(5)" en "(1)(3)(5)[7](9)"
\b La coincidencia se debe producir en un límite entre un carácter \w (alfanumérico) y un carácter \W (no alfanumérico). \b\w+\s\w+\b "them theme", "them them" en "them theme them them"
\B La coincidencia no se debe producir en un límite \b. \Bend\w*\b "ends", "ender" en "end sends endure lender"

Construcciones de agrupamiento

Las construcciones de agrupamiento definen subexpresiones de una expresión regular y, normalmente, capturan subcadenas de una cadena de entrada. Las construcciones de agrupamiento incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, consulte Construcciones de agrupamiento.

Construcción de agrupamiento Descripción Modelo Coincidencias
(Subexpresión) Captura la subexpresión coincidente y le asigna un número ordinal basado en uno. (\w)\1 "ee" en "deep"
(?<Nombre>Subexpresión)
o
(?'Nombre'Subexpresión)
Captura la subexpresión coincidente en un grupo con nombre. (?<double>\w)\k<double> "ee" en "deep"
(?<name1-name2>Subexpresión)
o
(?'name1-name2'Subexpresión)
Define una definición de grupo de equilibrio. Para obtener más información, consulte la sección "Definiciones de grupos de equilibrio" en Construcciones de agrupamiento. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" en "3+2^((1-3)*(3-1))"
(?:Subexpresión) Define un grupo sin captura. Write(?:Line)? "WriteLine" en "Console.WriteLine()"

"Write" en "Console.Write(value)"
(?imnsx-imnsx:Subexpresión) Aplica o deshabilita las opciones especificadas dentro de subexpresión. Para obtener más información, consulte Opciones de expresiones regulares. A\d{2}(?i:\w+)\b "A12xl", "A12XL" en "A12xl A12XL a12xl"
(?=Subexpresión) Aserción de búsqueda anticipada positiva de ancho cero. \b\w+\b(?=.+and.+) "cats", "dogs"
in
"cats, dogs and some mice."
(?!Subexpresión) Aserción de búsqueda anticipada negativa de ancho cero. \b\w+\b(?!.+and.+) "and", "some", "mice"
in
"cats, dogs and some mice."
(?<=Subexpresión) Aserción de búsqueda tardía positiva de ancho cero. \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
in
"cats, dogs and some mice."
————————————
"and", "some", "mice"
in
"cats, dogs and some mice."
(?<!Subexpresión) Aserción de búsqueda tardía negativa de ancho cero. \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats", "dogs", "and"
in
"cats, dogs and some mice."
————————————
"cats", "dogs"
in
"cats, dogs and some mice."
(?>Subexpresión) Grupo atómico. (?>a|ab)c "ac" En"ac"

nada en"abc"

Soluciones alternativas de un vistazo

Cuando el motor de expresiones regulares alcanza una expresión de búsqueda, toma una subcadena que llega desde la posición actual hasta el inicio (lookbehind) o final (lookahead) de la cadena original y, a continuación, se ejecuta Regex.IsMatch en esa subcadena mediante el patrón de búsqueda. A continuación, el resultado de esta subexpresión se determina si se trata de una aserción positiva o negativa.

Solución alternativa Nombre Función
(?=check) Lookahead positivo Afirma que lo que sigue inmediatamente a la posición actual en la cadena es "check"
(?<=check) Lookbehind positivo Afirma que lo que precede inmediatamente a la posición actual en la cadena es "check"
(?!check) Lookahead negativo Afirma que lo que sigue inmediatamente a la posición actual en la cadena no es "check"
(?<!check) Lookbehind negativo Afirma que lo que precede inmediatamente a la posición actual en la cadena no es "check"

Una vez que coincidan, los grupos atómicos no se volverán a evaluar, incluso cuando se produzca un error en el resto del patrón debido a la coincidencia. Esto puede mejorar significativamente el rendimiento cuando se producen cuantificadores dentro del grupo atómico o el resto del patrón.

Cuantificadores

Un cuantificador especifica cuántas instancias del elemento anterior (que puede ser un carácter, un grupo o una clase de caracteres) debe haber en la cadena de entrada para que se encuentre una coincidencia. Los cuantificadores incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, consulte Cuantificadores.

Cuantificador Descripción Modelo Coincidencias
* Coincide con el elemento anterior cero o más veces. a.*c "abcbc" en "abcbc"
+ Coincide con el elemento anterior una o más veces. "be+" "bee" en "been", "be" en "bent"
? Coincide con el elemento anterior cero veces o una vez. "rai?" "rai" en "rain"
{N} Coincide con el elemento anterior exactamente n veces. ",\d{3}" ",043" en "1,043.6", ",876", ",543" y ",210" en "9,876,543,210"
{N,} Coincide con el elemento anterior al menos n veces. "\d{2,}" "166", "29", "1930"
{N,M} Coincide con el elemento anterior al menos n veces, pero no más de m veces. "\d{3,5}" "166", "17668"

"19302" en "193024"
*? Coincide con el elemento anterior cero o más veces, pero el menor número de veces que sea posible. a.*?c "abc" en "abcbc"
+? Coincide con el elemento anterior una o más veces, pero el menor número de veces que sea posible. "be+?" "be" en "been", "be" en "bent"
?? Coincide con el elemento anterior cero o una vez, pero el menor número de veces que sea posible. "rai??" "ra" en "rain"
{N}? Coincide con el elemento precedente exactamente n veces. ",\d{3}?" ",043" en "1,043.6", ",876", ",543" y ",210" en "9,876,543,210"
{N,}? Coincide con el elemento anterior al menos n veces, pero el menor número de veces posible. "\d{2,}?" "166", "29", "1930"
{N,M}? Coincide con el elemento anterior entre n y m veces, pero el menor número de veces posible. "\d{3,5}?" "166", "17668"

"193", "024" en "193024"

Construcciones de referencia inversa

Una referencia inversa permite identificar una subexpresión coincidente previamente más adelante en la misma expresión regular. En la tabla siguiente se enumeran las construcciones de referencia inversa admitidas en las expresiones regulares de .NET. Para obtener más información, consulte Construcciones de referencia inversa.

Construcción de referencias inversas Descripción Modelo Coincidencias
\number Referencia inversa Coincide con el valor de una subexpresión numerada. (\w)\1 "ee" en "seek"
\k<Nombre> Referencia inversa con nombre Coincide con el valor de una expresión con nombre. (?<char>\w)\k<char> "ee" en "seek"

Construcciones de alternancia

Las estructuras de alternancia modifican una expresión regular para habilitar o no la coincidencia. Estas construcciones incluyen los elementos del lenguaje enumerados en la tabla siguiente. Para obtener más información, consulte Construcciones de alternancia.

Construcciones de alternancia Descripción Modelo Coincidencias
| Coincide con cualquier elemento separado por el carácter de barra vertical (|). th(e|is|at) "the", "this" en "this is the day."
(?(Expresión)|No)
o
(?(Expresión))
Coincide con si el patrón de expresión regular designado por expresión coincide; de lo contrario, coincide con la parte opcional no. expresión se interpreta como una aserción de ancho cero.

Para evitar ambigüedad con un grupo de captura con nombre o numerado, puede usar opcionalmente una aserción explícita, como esta:
(?( (?=Expresión) )|No)
(?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" en "A10 C103 910"
(?(Nombre)|No)
o
(?(Nombre))
Coincide con si nombre, un grupo de captura con nombre o numerado, tiene una coincidencia; de lo contrario, coincide con la parte opcional no. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg ", "\"Yiska playing.jpg\"" en "Dogs.jpg \"Yiska playing.jpg\""

Sustituciones

Las sustituciones son elementos del lenguaje de expresiones regulares que se admiten en modelos de reemplazo. Para obtener más información, consulte Substituciones. Los metacaracteres enumerados en la tabla siguiente son aserciones atómicas de ancho cero.

Carácter Descripción Modelo Modelo de reemplazo Cadena de entrada Cadena de resultado
$number Sustituye la subcadena que coincide con el grupo número. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${Nombre} Sustituye la subcadena que coincide con el grupo con nombre nombre. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ Sustituye un "$" literal. \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& Sustituye una copia de toda la coincidencia. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` Sustituye todo el texto de la cadena de entrada delante de la coincidencia. B+ $` "AABBCC" "AAAACC"
$' Sustituye todo el texto de la cadena de entrada detrás de la coincidencia. B+ $' "AABBCC" "AACCCC"
$+ Sustituye el último grupo capturado. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ Sustituye toda la cadena de entrada. B+ $_ "AABBCC" "AAAABBCCCC"

Opciones de expresiones regulares

Puede especificar opciones que controlen cómo debe interpretar el motor de expresiones regulares un patrón de expresión regular. Muchas de estas opciones pueden especificarse alineadas (en el patrón de expresión regular) o como una o más constantes de RegexOptions. Esta referencia rápida solo muestra las opciones alineadas. Para obtener más información sobre las opciones alineadas y RegexOptions, consulte el artículo Opciones de expresiones regulares.

Puede especificar una opción alineada de dos formas:

  • Mediante el uso de la construcción(?imnsx-imnsx) varios, donde un signo menos (-) antes de una opción o un conjunto de opciones desactiva esas opciones. Por ejemplo, (?i-mn) activa una coincidencia sin distinción entre mayúsculas y minúsculas (i), desactiva el modo multilínea (m) y desactiva las capturas de grupo sin nombre (n). La opción se aplica al patrón de expresión regular a partir del punto en el que esta se define y es efectiva hasta el final del patrón o hasta el punto en el que otro constructor invierte la opción.
  • Con la Construcciones de agrupamiento(?imnsx-imnsx:subexpresión), que define opciones solo para el grupo especificado.

El motor de expresiones regulares de .NET admite las siguientes opciones insertadas:

Opción Descripción Modelo Coincidencias
i Usa la coincidencia sin distinción entre mayúsculas y minúsculas. \b(?i)a(?-i)a\w+\b "aardvark", "aaaAuto" en "aardvark AAAuto aaaAuto Adam breakfast"
m Usa el modo multilínea. ^ y $ coinciden con el principio y el final de una línea, en lugar del principio y el final de una cadena. Para obtener un ejemplo, consulte la sección "Modo multilínea" en Opciones de expresiones regulares.
n No se capturan grupos sin nombre. Para obtener un ejemplo, consulte la sección "Solo capturas explícitas" en Opciones de expresiones regulares.
s Usa el modo de una sola línea. Para obtener un ejemplo, consulte la sección "Modo de una sola línea" en Opciones de expresiones regulares.
x Se omite el espacio en blanco sin escape en el patrón de expresión regular. \b(?x) \d+ \s \w+ "1 aardvark", "2 cats" en "1 aardvark 2 cats IV centurions"

Construcciones misceláneas

Las estructuras misceláneas modifican un modelo de expresión regular o proporcionan información sobre él. En la tabla siguiente se enumeran las construcciones misceláneas admitidas por .NET. Para obtener más información, consulte Construcciones misceláneas.

Construcción Definición Ejemplo
(?imnsx-imnsx) Establece o deshabilita opciones como la no distinción entre mayúsculas y minúsculas en medio de un patrón. Para más información, consulte Opciones de expresiones regulares. \bA(?i)b\w+\b coincide con "ABA", "Able" en "ABA Able Act"
(?#Comentario) Comentario alineado El comentario termina en el primer paréntesis de cierre. \bA(?#Matches words starting with A)\w+\b
# [hasta el final de la línea] Comentario en modo X El comentario comienza en un carácter # sin escape y continúa hasta el final de la línea. (?x)\bA\w+\b#Matches words starting with A

Vea también