Linguagem de expressões regulares – referência rápida

Uma expressão regular é um padrão ao qual o mecanismo de expressões regulares tenta corresponder no texto de entrada. Um padrão consiste em um ou mais literais de caracteres, operadores ou constructos. Para ver uma breve introdução, confira Expressões regulares no .NET.

Cada seção desta referência rápida lista uma categoria específica de caracteres, operadores e constructos que podem ser usados para definir expressões regulares.

Também fornecemos essas informações em dois formatos, que podem ser baixados e impressos para uma referência simplificada:

Escapes de caracteres

O caractere de barra invertida (\) em uma expressão regular indica que o próximo caractere é um caractere especial (conforme mostrado na tabela a seguir) ou se ele deve ser interpretado literalmente. Para obter mais informações, consulte Escapes de Caracteres.

Caractere com escape Descrição Padrão Correspondências
\a Corresponde a um caractere de sino, \u0007. \a "\u0007" em "Error!" + '\u0007'
\b Em uma classe de caractere, corresponde a um backspace, \ u0008. [\b]{3,} "\b\b\b\b" em "\b\b\b\b"
\t Corresponde a uma tabulação, \u0009. (\w+)\t "item1\t" e "item2\t" em "item1\titem2\t"
\r Corresponde a um retorno de carro, \u000D. (\r não é equivalente ao caractere newline, \n.) \r\n(\w+) "\r\nThese" em "\r\nThese are\ntwo lines."
\v Corresponde a uma tabulação vertical, \u000B. [\v]{2,} "\v\v\v" em "\v\v\v"
\f Corresponde a um avanço de página, \u000C. [\f]{2,} "\f\f\f" em "\f\f\f"
\n Corresponde a uma nova linha, \u000A. \r\n(\w+) "\r\nThese" em "\r\nThese are\ntwo lines."
\e Corresponde a um escape, \u001B. \e "\x001B" em "\x001B"
\nnn Usa representação octal para especificar um caractere (nnn consiste em dois ou três dígitos). \w\040\w "a b" e "c d" em "a bc d"
\xnn Usa representação hexadecimal para especificar um caractere (nn consiste exatamente em dois dígitos). \w\x20\w "a b" e "c d" em "a bc d"
\cX

\cx
Corresponde ao caractere de controle ASCII especificado por X ou x, em que X ou x é a letra do caractere de controle. \cC "\x0003" em "\x0003" (Ctrl-C)
\unnnn Corresponde a um caractere Unicode usando representação hexadecimal (exatamente quatro dígitos, como representado por nnnn). \w\u0020\w "a b" e "c d" em "a bc d"
\ Quando seguido por um caractere que não é reconhecido como um caractere de escape nesta e em outras tabelas deste tópico, corresponde a esse caractere. Por exemplo, \* é igual a \x2A, e \. é igual a \x2E. Isso permite que o mecanismo de expressões regulares remova ambiguidades de elementos da linguagem (como * ou ?) e caracteres literais (representados por \* ou \?). \d+[\+-x\*]\d+ "2+2" e "3*9" em "(2+2) * 3*9"

Classes de caracteres

Uma classe de caractere corresponde a qualquer um dos conjuntos de caracteres. As classes de caracteres incluem os elementos de linguagem listados na tabela a seguir. Para saber mais, confira Classes de caracteres.

Classe de caractere Descrição Padrão Correspondências
[character_group] Corresponde a qualquer caractere único em character_group. Por padrão, a correspondência diferencia maiúsculas de minúsculas. [ae] "a" em "gray"

"a" e "e" em "lane"
[^character_group] Negação: corresponde a qualquer caractere único que não esteja em character_group. Por padrão, caracteres em character_group diferenciam maiúsculas de minúsculas. [^aei] "r", "g" e "n" em "reign"
[first-last] Intervalo de caracteres: corresponde a qualquer caractere único no intervalo entre first e last. [A-Z] "A" e "B" em "AB123"
. Curinga: corresponde a qualquer caractere único, exceto \n.

Para corresponder a um caractere de período literal (. ou \u002E), você deve precedê-lo com o caractere de escape (\.).
a.e "ave" em "nave"

"ate" em "water"
\p{name} Corresponde a qualquer caractere único na categoria geral Unicode ou no bloco nomeado especificado por name. \p{Lu}

\p{IsCyrillic}
"C" e "L" em "City Lights"

"Д" e "Ж" em "ДЖem"
\P{name} Corresponde a qualquer caractere único que não esteja na categoria geral Unicode ou no bloco nomeado especificado por name. \P{Lu}

\P{IsCyrillic}
"i", "t" e "y" em "City"

"e" e "m" em "ДЖem"
\w Corresponde a qualquer caractere de palavra. \w "I", "D", "A", "1" e "3" em "ID A1.3"
\W Corresponde a qualquer caractere sem palavra. \W " " e "." em "ID A1.3"
\s Corresponde a qualquer caractere de espaço em branco. \w\s "D " em "ID A1.3"
\S Corresponde a qualquercaractere sem espaço em branco. \s\S " _" em "int __ctr"
\d Corresponde a qualquer dígito decimal. \d "4" em "4 = IV"
\D Corresponde a qualquer caractere que não seja um dígito decimal. \D " ", "=", " ", "I" e "V" em "4 = IV"

Âncoras

Âncoras ou asserções atômicas de largura zero, fazem com que uma correspondência tenha êxito ou falha dependendo da posição atual na cadeia de caracteres, mas não fazem com que o mecanismo avance na cadeia de caracteres ou consuma caracteres. Os metacaracteres listados na tabela a seguir são âncoras. Para saber mais, confira Âncoras.

Asserção Descrição Padrão Correspondências
^ Por padrão, a correspondência precisa começar no início da cadeia de caracteres. No modo multilinha, precisa começar no início da linha. ^\d{3} "901" em "901-333-"
$ Por padrão, a correspondência deve ocorrer no fim da cadeia de caracteres ou antes de \n no fim da cadeia de caracteres. No modo multilinha, deve antes do fim da linha ou antes de \n no fim da linha. -\d{3}$ "-333" em "-901-333"
\A A correspondência deve ocorrer no início da cadeia de caracteres. \A\d{3} "901" em "901-333-"
\Z A correspondência deve ocorrer no final da cadeia de caracteres ou antes de \n no final da cadeia de caracteres. -\d{3}\Z "-333" em "-901-333"
\z A correspondência deve ocorrer no final da cadeia de caracteres. -\d{3}\z "-333" em "-901-333"
\G A correspondência deve ocorrer no ponto em que a correspondência anterior terminou, ou, caso não haja correspondência anterior, na posição na cadeia de caracteres em que a correspondência foi iniciada. \G\(\d\) "(1)", "(3)" e "(5)" em "(1)(3)(5)[7](9)"
\b A correspondência deve ocorrer em um limite entre um caractere \w (alfanumérico) e um caractere \W (não alfanumérico). \b\w+\s\w+\b "them theme" e "them them" em "them theme them them"
\B A correspondência não deve ocorrer em um limite \b. \Bend\w*\b "ends" e "ender" em "end sends endure lender"

Constructos de agrupamento

Os constructos de agrupamento delineiam subexpressões de uma expressão regular e, em geral, capturam subcadeias de caracteres de uma cadeia de caracteres de entrada. Os constructos de agrupamento incluem os elementos de linguagem listados na tabela a seguir. Para saber mais, confira Constructos de agrupamento.

Constructo de agrupamento Descrição Padrão Correspondências
(subexpression) Captura a subexpressão correspondente e atribui a ela um número ordinal com base um. (\w)\1 "ee" em "deep"
(?<name>subexpression)
ou
(?'name'subexpression)
Captura a subexpressão correspondente em um grupo nomeado. (?<double>\w)\k<double> "ee" em "deep"
(?<name1-name2>subexpression)
ou
(?'name1-name2'subexpression)
Especifica uma definição de grupo de balanceamento. Para saber mais, confira a seção "Definição de grupo de balanceamento" em Constructos de agrupamento. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" em "3+2^((1-3)*(3-1))"
(?:subexpression) Define um grupo de não captura. Write(?:Line)? "WriteLine" em "Console.WriteLine()"

"Write" em "Console.Write(value)"
(?imnsx-imnsx:subexpression) Aplica ou desabilita as opções especificadas em subexpressão. Para obter mais informações, consulte Opções de expressões regulares. A\d{2}(?i:\w+)\b "A12xl" e "A12XL" em "A12xl A12XL a12xl"
(?=subexpression) Asserções lookahead positivas de largura zero. \b\w+\b(?=.+and.+) "cats", "dogs"
em
"cats, dogs and some mice."
(?!subexpression) Asserções lookahead negativas de largura zero. \b\w+\b(?!.+and.+) "and", "some", "mice"
em
"cats, dogs and some mice."
(?<=subexpression) Asserção lookbehind positiva de largura zero. \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
em
"cats, dogs and some mice."
————————————
"and", "some", "mice"
em
"cats, dogs and some mice."
(?<!subexpression) Asserção lookbehind negativa de largura zero. \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats", "dogs", "and"
em
"cats, dogs and some mice."
————————————
"cats", "dogs"
em
"cats, dogs and some mice."
(?>subexpression) Grupo atômico. '(?>a|ab)c "ac" in"ac"

nothing in"abc"

Visão geral rápida de lookarounds

Quando o mecanismo de expressão regular atinge uma expressão lookaround, ele usa uma substring que alcança da posição atual até o início (lookbehind) ou final (lookahead) da cadeia de caracteres original e, em seguida, executa Regex.IsMatch nessa substring usando o padrão lookaround. O sucesso do resultado dessa subexpressão é então determinado se é uma declaração positiva ou negativa.

Lookaround Nome Função
(?=check) Lookahead positivo Declara que o que segue imediatamente a posição atual na cadeia de caracteres é "check"
(?<=check) Lookbehind positivo Declara que o que precede imediatamente a posição atual na cadeia de caracteres é "check"
(?!check) Lookahead negativo Declara que o que segue imediatamente a posição atual na cadeia de caracteres não é "check"
(?<!check) Lookbehind negativo Declara que o que precede imediatamente a posição atual na cadeia de caracteres não é "check"

Depois de corresponderem, os grupos atômicos não serão reavaliados outra vez, mesmo quando o restante do padrão falhar devido à correspondência. Isso pode melhorar significativamente o desempenho quando os quantificadores ocorrem dentro do grupo atômico ou no restante do padrão.

Quantificadores

Um quantificador especifica quantas instâncias do elemento anterior (que pode ser um caractere, um grupo ou uma classe de caracteres) devem estar presentes na cadeia de caracteres de entrada para que uma correspondência ocorra. Os quantificadores incluem os elementos de linguagem listados na tabela a seguir. Para saber mais, confira Quantificadores.

Quantificador Descrição Padrão Correspondências
* Corresponde ao elemento anterior zero ou mais vezes. a.*c "abcbc" em "abcbc"
+ Corresponde ao elemento anterior uma ou mais vezes. "be+" "bee" em "been", "be" em "bent"
? Corresponde ao elemento anterior zero ou uma vez. "rai?" "rai" em "rain"
{n} Corresponde ao elemento anterior exatamente n vezes. ",\d{3}" ",043" em "1,043.6", ",876", ",543" e ",210" em "9,876,543,210"
{n,} Corresponde ao elemento anterior pelo menos n vezes. "\d{2,}" "166", "29", "1930"
{n,m} Corresponde ao elemento anterior pelo menos n vezes, mas não mais do que m vezes. "\d{3,5}" "166", "17668"

"19302" em "193024"
*? Corresponde ao elemento anterior zero ou mais vezes, mas o menor número de vezes possível. a.*?c "abc" em "abcbc"
+? Corresponde ao elemento anterior uma ou mais vezes, mas o menor número de vezes possível. "be+?" "be" em "been", "be" em "bent"
?? Corresponde ao elemento anterior zero ou uma vez, mas o menor número de vezes possível. "rai??" "ra" em "rain"
{n}? Corresponde ao elemento anterior exatamente n vezes. ",\d{3}?" ",043" em "1,043.6", ",876", ",543" e ",210" em "9,876,543,210"
{n,}? Corresponde ao elemento anterior pelo menos n vezes, mas o menor número de vezes possível. "\d{2,}?" "166", "29", "1930"
{n,m}? Corresponde ao elemento anterior entre n e m vezes, mas o menor número de vezes possível. "\d{3,5}?" "166", "17668"

"193" e "024" em "193024"

Construtores de referência inversa

Um referência inversa permite que uma subexpressão correspondida anteriormente seja identificada posteriormente na mesma expressão regular. A tabela a seguir lista os constructos de referência inversa tem suporte nas expressões regulares do .NET. Para saber mais, confira Constructos de referência inversa.

Constructo de referência inversa Descrição Padrão Correspondências
\number Referência inversa. Corresponde ao valor de uma subexpressão numerada. (\w)\1 "ee" em "seek"
\k<name> Referência inversa nomeada. Corresponde ao valor de uma expressão nomeada. (?<char>\w)\k<char> "ee" em "seek"

Construtores de alternância

Os constructos de alternância modificam uma expressão regular para habilitar uma correspondência do tipo um/ou outro. Esses constructos incluem os elementos de linguagem listados na tabela a seguir. Para saber mais, confira Constructos de alternância.

Constructo de alternância Descrição Padrão Correspondências
| Corresponde a qualquer elemento separado pelo caractere de barra vertical (|). th(e|is|at) "the" e "this" em "this is the day."
(?(expression)yes|no)
ou
(?(expression)yes)
Corresponde a yes se o padrão de expressão regular designado por expression for correspondente. Do contrário, corresponde à parte no opcional. expressão é interpretado como uma asserção de largura zero.

Para evitar ambiguidade com um grupo de captura nomeado ou numerado, você pode usar opcionalmente uma declaração explícita, como esta:
(?( (?=expression) )yes|no)
(?(A)A\d{2}\b|\b\d{3}\b) "A10" e "910" em "A10 C103 910"
(?(name)yes|no)
ou
(?(name)yes)
Corresponde a yes se name, um grupo de captura nomeado ou numerado, apresenta uma correspondência. Do contrário, corresponde a no opcional. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg " e "\"Yiska playing.jpg\"" em "Dogs.jpg \"Yiska playing.jpg\""

Substituições

As substituições são elementos de linguagem de expressões regulares com suporte em padrões de substituição. Para saber mais, confira Substituições. Os metacaracteres listados na tabela a seguir são asserções atômicas de largura zero.

Caractere Descrição Padrão Padrão de substituição Cadeia de caracteres de entrada Cadeia de caracteres de resultado
$number Substitui a subcadeia de caracteres correspondida pelo grupo number. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${name} Substitui a substring de caracteres correspondida pelo grupo chamado nome. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ Substitui um literal "$". \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& Substitui uma cópia da correspondência inteira. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` Substitui todo o texto da cadeia de caracteres de entrada antes da correspondência. B+ $` "AABBCC" "AAAACC"
$' Substitui todo o texto da cadeia de caracteres de entrada após a correspondência. B+ $' "AABBCC" "AACCCC"
$+ Substitui o último grupo que foi capturado. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ Substitui a cadeia de caracteres de entrada inteira. B+ $_ "AABBCC" "AAAABBCCCC"

Opções de expressões regulares

Você pode especificar opções que controlam como o mecanismo de expressões regulares interpreta uma expressão regular padrão. Muitas dessas opções podem ser especificadas de maneira embutida (no padrão da expressão regular) ou como uma ou mais constantes RegexOptions. Essa referência rápida lista somente as opções embutidas. Para obter mais informações sobre opções embutidas e RegexOptions, consulte o artigo Opções de expressões regulares.

É possível especificar uma opção embutida de duas formas:

  • Usando o constructo diverso(?imnsx-imnsx), em que um sinal de subtração (-) antes de uma opção ou um conjunto de opções desativa essas opções. Por exemplo, (?i-mn) ativa a correspondência sem diferenciação de maiúsculas e minúsculas (i), desativa o modo de várias linhas (m) e desativa capturas de grupo sem nome (n). A opção se aplica ao padrão de expressão regular no ponto em que a opção é definida e entra em vigor no final do padrão ou no ponto em que outro constructo inverte a opção.
  • Usando o construtor de agrupamento(?imnsx-imnsx:subexpressão), que define opções somente para o grupo especificado.

O mecanismo de expressões regulares do .NET dá suporte às opções em linha a seguir:

Opção Descrição Padrão Correspondências
i Use correspondência sem diferenciação de maiúsculas e minúsculas. \b(?i)a(?-i)a\w+\b "aardvark" e "aaaAuto" em "aardvark AAAuto aaaAuto Adam breakfast"
m Use o modo multilinha. ^ e $ correspondem ao início e ao fim de uma linha em vez do início e fim de uma cadeia de caracteres. Para um exemplo, consulte a seção "Modo multilinha" em Opções de expressões regulares.
n Não capture grupos sem nome. Para ver um exemplo, consulte a seção "Apenas capturas explícitas" em Opções de expressões regulares.
s Use o modo de linha única. Para ver um exemplo, consulte a seção "Modo de linha única" em Opções de expressões regulares.
x Ignore espaços em branco sem escape no padrão da expressão regular. \b(?x) \d+ \s \w+ "1 aardvark" e "2 cats" em "1 aardvark 2 cats IV centurions"

Constructos diversos

Os constructos diversos modificam um expressão regular padrão ou fornecem informações sobre ela. A tabela a seguir lista os constructos diversos que têm suporte no .NET. Para saber mais, confira Constructos diversos.

Constructo Definição Exemplo
(?imnsx-imnsx) Define ou desabilita opções como não diferenciação de maiúsculas e minúsculas no meio de um padrão. Para saber mais, confira Opções de expressão regular. \bA(?i)b\w+\b corresponde a "ABA" e "Able" em "ABA Able Act"
(?#comment) Comentário embutido. O comentário é encerrado no primeiro caractere de fechar parênteses. \bA(?#Matches words starting with A)\w+\b
# [até o final da linha] Comentário do modo X. O comentário começa em um # sem escape e continua até o final da linha. (?x)\bA\w+\b#Matches words starting with A

Confira também