Usar expressões regulares no Visual Studio
Visual Studio usa expressões regulares do .NET para localizar e substituir texto.
Sintaxe da expressão regular
A tabela a seguir contém alguns caracteres de expressão regular, operadores, construções e exemplos de padrão. Para obter uma referência mais completa, consulte Linguagem de expressão regular.
Finalidade | Expressão | Exemplo |
---|---|---|
Corresponda a qualquer caractere (exceto uma quebra de linha). Para obter mais informações, consulte Any character. | . |
a.o corresponde a "aro" em "around" e "abo" em "about", mas não a "acro" em "across" |
Corresponder a zero ou mais ocorrências da expressão anterior, procurando corresponder ao maior número possível de caracteres. Para obter mais informações, consulte correspondência zero ou mais vezes. | * |
a*r corresponde a "r" na palavra "rack", "ar" na palavra "ark" e "aar" na palavra "aardvark" |
Corresponder a qualquer caractere zero ou mais vezes. | .* |
c.*e corresponde a "cke" em "racket", a "comme" em "comment" e a "code" em "code" |
Corresponder a uma ou mais ocorrências da expressão anterior (corresponder ao maior número possível de caracteres). Para obter mais informações, consulte Corresponder uma ou mais vezes. | + |
e+d corresponde a "eed" em "feeder" e "ed" em "faded" |
Combine qualquer personagem uma ou mais vezes. | .+ |
e.+e corresponde a "eede" em "feeder", mas não encontra correspondências em "feed" |
Corresponder a zero ou mais ocorrências da expressão anterior (corresponder ao menor número possível de caracteres). Para obter mais informações, consulte Corresponder zero ou mais vezes (correspondência preguiçosa). | *? |
\w*?d corresponde a "fad" e "ed" em "faded", mas não a palavra inteira "faded" devido ao jogo preguiçoso |
Corresponder a uma ou mais ocorrências da expressão anterior (corresponder ao menor número possível de caracteres). Para obter mais informações, consulte Corresponder uma ou mais vezes (partida preguiçosa). | +? |
e\w+? corresponde a "ee" em "asleep" e "ed" em "faded", mas não encontra correspondências em "fade" |
Ancorar a cadeia de correspondência ao início de uma linha ou cadeia de caracteres | ^ |
^car corresponde à palavra "carro" apenas quando aparece no início de uma linha |
Ancorar a cadeia de correspondência na extremidade de uma linha | \r?$ |
car\r?$ corresponde a "carro" apenas quando aparece no final de uma linha |
Ancorar a cadeia de correspondência ao final do arquivo | $ |
car$ corresponde a "carro" apenas quando aparece no final do ficheiro |
Corresponder a qualquer carácter num conjunto | [ABC] |
b[abc] corresponde a "ba", "bb" e "bc" |
Corresponder a qualquer caractere em um intervalo de caracteres | [a-f] |
be[n-t] corresponde a "bet" em "between", "ben" em "beneath" e "bes" em "beside", mas não encontra correspondências em "below" |
Capturar e numerar implicitamente a expressão contida entre parênteses | () |
([a-z])X\1 corresponde a "aXa" e "bXb", mas não a "aXb". "\1" refere-se ao primeiro grupo de expressões "[a-z]". Para mais informações, consulte grupos de captura e padrões de substituição. |
Invalidar um jogo | (?! ABC) |
real(?!ity) corresponde a "real" em "realty" e "realmente", mas não em "reality". Também encontra o segundo "real" (mas não o primeiro "real") em "realreal". |
Corresponda a qualquer caractere que não esteja em um determinado conjunto de caracteres. Para obter mais informações, consulte Grupo de caracteres negativos. | [^abc] |
be[^n-t] corresponde a "bef" em "antes", "beh" em "atrás" e "bel" em "abaixo", mas não encontra correspondências em "abaixo" |
Corresponda à expressão antes ou à que vem depois do símbolo | | |
(sponge|mud) bath combina "banho de esponja" e "banho de lama" |
Fuja do personagem após o backslash | \ |
\^ corresponde ao caractere ^ |
Especifique o número de ocorrências do caractere ou grupo anterior. Para obter mais informações, consulte corresponder à exatamente n vezes. | {n}, em que «n» é o número de ocorrências |
x(ab){2}x corresponde a "xababx"x(ab){2,3}x corresponde a "xababx" e "xabababx", mas não a "xababababx" |
Corresponder texto numa categoria Unicode. Para obter mais informações sobre classes de caracteres Unicode, consulte Unicode Standard 15.0 Character Properties. | \p{X}, onde "X" é o número Unicode. |
\p{Lu} corresponde a "T" e "D" em "Thomas Doe" |
Corresponder um limite de palavra | \b (Fora de uma classe de caractere \b especifica um limite de palavra e dentro de uma classe de caractere \b especifica um backspace.) |
\bin corresponde "em" em "dentro", mas não encontra correspondências em "pinto" |
Corresponder a uma quebra de linha (ou seja, um retorno de carro seguido por uma nova linha ou apenas uma nova linha) | \r?\n |
End\r?\nBegin corresponde a "End" e "Begin" apenas quando "End" é a última string em uma linha e "Begin" é a primeira string na próxima linha |
Corresponder a qualquer caractere de palavra | \w |
a\wd corresponde a "add" e "a1d", mas não a "a d". |
Corresponder a qualquer caractere de espaço em branco | \s |
Public\sInterface corresponde à frase "Interface Pública" |
Corresponder a qualquer caractere decimal | \d |
\d corresponde a "4" e "0" em "wd40" |
Um exemplo de expressão regular que combina alguns dos operadores e construções para corresponder a um número hexadecimal é \b0[xX]([0-9a-fA-F]+)\b
. Esta expressão corresponde a "0xc67f", mas não a "0xc67g".
Dica
Nos sistemas operacionais Windows, a maioria das linhas termina em "\r\n" (um retorno de carro seguido por uma nova linha). Esses caracteres não são visíveis, mas estão presentes no editor e passados para o serviço de expressão regular .NET. Quando você lida com arquivos da Web ou de um sistema operacional que não seja Windows, certifique-se de levar em conta a possibilidade de que eles usem uma nova linha apenas para uma quebra de linha.
Capturar grupos e padrões de substituição
Um grupo de captura delineia uma subexpressão de uma expressão regular e captura uma substring de uma cadeia de caracteres de entrada. Você pode usar grupos capturados dentro da própria expressão regular (por exemplo, para procurar uma palavra repetida) ou em um padrão de substituição. Para obter informações detalhadas, consulte Agrupando construções em expressões regulares.
Para criar um grupo de captura numerado, coloque a subexpressão entre parênteses no padrão de expressão regular. As capturas são numeradas automaticamente da esquerda para a direita, baseando-se na posição do parêntese de abertura na expressão regular. Para acessar o grupo capturado, considere os seguintes exemplos:
Dentro da expressão regular: Use
\number
. Por exemplo,\1
na expressão regular(\w+)\s\1
faz referência ao primeiro grupo de captura(\w+)
.Num padrão de substituição: Use
$number
. Por exemplo, a expressão regular agrupada(\d)([a-z])
define dois grupos: o primeiro grupo contém um único dígito decimal e o segundo grupo contém um único caractere entre um e z. A expressão encontra quatro correspondências na seguinte cadeia de caracteres: 1a 2b 3c 4d. A string de substituiçãoz$1
faz referência apenas ao primeiro grupo ($1
) e converte a string para z1 z2 z3 z4.
A imagem a seguir mostra uma expressão regular (\w+)\s\1
e uma cadeia de caracteres de substituição $1
. Tanto a expressão regular quanto o padrão de substituição fazem referência ao primeiro grupo de captura numerado automaticamente como 1. Quando você escolhe Substituir todos os na caixa de diálogo Substituição Rápida no Visual Studio, palavras repetidas são removidas do texto.
Dica
Na caixa de diálogo Substituição Rápida , certifique-se de selecionar o botão Utilizar Expressões Regulares, ou prima Alt+E.
Grupos de captura nomeados
Em vez de confiar na numeração automática de um grupo de captura, você pode dar um nome a ele. A sintaxe de um grupo de captura nomeado é (?<name>subexpression)
.
Grupos de captura nomeados, como grupos de captura numerados, podem ser usados dentro da própria expressão regular ou em um padrão de substituição. Para acessar o grupo de captura nomeado, considere os seguintes exemplos:
Dentro da expressão regular: Use
\k<name>
. Por exemplo,\k<repeated>
na expressão regular(?<repeated>\w+)\s\k<repeated>
faz referência ao grupo de captura chamadorepeated
e cuja subexpressão é\w+
.Em um padrão de substituição: Use
${name}
. Por exemplo,${repeated}
.
A imagem a seguir mostra uma expressão regular (?<repeated>\w+)\s\k<repeated>
e uma cadeia de caracteres de substituição ${repeated}
. Tanto a expressão regular quanto o padrão de substituição fazem referência ao grupo de captura chamado repeated
. Quando você escolhe Substituir todos os na caixa de diálogo Substituição Rápida no Visual Studio, palavras repetidas são removidas do texto.
Dica
Certifique-se de selecionar o botão Usar expressões regulares (ou pressione Alt+E) na caixa de diálogo Substituição Rápida.
Para obter mais informações sobre grupos de captura nomeados, consulte Subexpressões correspondentes nomeadas. Para obter mais informações sobre expressões regulares usadas em padrões de substituição, consulte substituições em expressões regulares.
Exemplos
Padrão | Descrição |
---|---|
int ([_A-Za-z][_A-Za-z0-9]*) |
Corresponder com definições de inteiros individuais. Os identificadores começam com uma letra maiúscula ou minúscula, seguida por zero ou mais (indicado por * ) letras ou números. O identificador é capturado como $1 pelos parênteses externos. |
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ |
Identificar declarações inteiras de C# que são inicializadas com literais inteiros, capturando as várias partes, incluindo o nível de acesso, modificadores como const ou static , o identificador e o valor atribuído. Observe o uso de \s+ para pelo menos um caractere de espaço em branco ou \s* se o espaço em branco pode ou não ocorrer. |
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) |
Corresponda à linha de abertura de um loop de foreach . Os parênteses literais são precedidos por barra invertida (\ ). Os vários grupos são capturados como $1 , $2 e $3 pelos parênteses sem escape. |
#define\s+([_A-Za-z][_A-Za-z0-9]*) |
Corresponde às definições #define (sem o valor, se houver). O token definido é armazenado em $1 . |
#include\s+["<](.*)[">] |
Correspondência inclui em um arquivo de origem C++. |