LazowskiAnton · Extensions

RegexSmith

Expressões regulares explicadas e testadas onde são escritas. Passe o mouse sobre um padrão em C# e veja uma linha por parte em palavras simples, os grupos em cores e strings que correspondem; veja sublinhados os padrões que podem travar; experimente seus próprios exemplos no Testador do RegexSmith e grave o padrão de volta com um clique.

Gratuito · Visual Studio 2022 e 2026 · 14 idiomas de interface · sem telemetria

Por que o RegexSmith

Um cartão ao passar o mouse sobre um padrão [GeneratedRegex]: o padrão com os grupos coloridos, uma linha por parte em palavras simples, exemplos que correspondem e um que não, e o status ✓ seguro

Palavras simples, não uma aula de sintaxe

^(?<year>\d{4})-(?<id>\d{1,5})$ vira “Início do texto”, “Exatamente 4 dígitos”, “De 1 a 5 dígitos” — uma linha por parte, aninhada sob o seu grupo, cada grupo com a sua cor.

Verificado pelo mecanismo real

Os exemplos do cartão e cada resultado do testador vêm do próprio mecanismo de regex do .NET, com as opções da chamada. O que você vê é o que o seu aplicativo vai fazer.

Padrões que podem travar

([a-z0-9]+\.?)+ parece inofensivo e pode congelar uma requisição com uma string longa que quase corresponde. O RegexSmith sublinha essas repetições e as corrige com Ctrl+.

Gratuito, sem pegadinhas

Sem assinatura, sem versão “pro”, sem coleta de dados, sem mensagens na janela Saída ou na inicialização. Padrões e exemplos ficam no seu computador. A única coisa que vamos pedir — depois que você o tiver usado por um tempo — é uma avaliação no Marketplace. Funciona no Visual Studio 2022 e 2026, x64 e ARM64.

Recursos

O cartão ao passar o mouse

Passe o mouse sobre a string de um padrão e a dica de ferramenta normal do Visual Studio ganha um cartão do RegexSmith: o que o padrão significa, com o que ele corresponde e se é seguro.

O cartão ao passar o mouse: o cabeçalho com o tipo e as opções, o padrão com os grupos coloridos, uma linha por parte aninhada sob os grupos, os exemplos e o botão Testar padrão

Onde funciona

Em arquivos C#, sobre o padrão de:

Strings normais, literais (@"…") e brutas ("""…""") são lidas como o compilador as lê, então "\\d" e @"\d" são o mesmo padrão.

O que o cartão mostra

Na telaSignificado
RegexSmith · Expressão regular do .NET · IgnoreCaseO tipo de padrão e as opções lidas da chamada, e o status à direita.
O padrãoOs parênteses de cada grupo de captura na sua cor, o conteúdo sublinhado nessa cor; o texto mantém a cor do tema, para continuar legível.
Exatamente 4 dígitosUma linha por parte em palavras simples — “Início do texto”, “Um dos textos: “jpg”, “png””, “De 1 a 5 dígitos” — aninhada sob o seu grupo. Um padrão muito longo termina com … mais N.
Etiquetas dos gruposO nome ou número de cada grupo em uma etiqueta na sua cor — as mesmas cores do padrão e do sublinhado no código.
✓ Corresponde: … ✗ Não corresponde: …Duas strings que correspondem e uma que não, geradas a partir do padrão e verificadas pelo mecanismo real do .NET. Os espaços aparecem como pontos claros.
▶ Testar padrão…Abre o padrão no Testador do RegexSmith.

O status

Na telaSignificado
✓ seguroO .NET aceita o padrão e nada nele pode causar backtracking catastrófico.
⚠ pode travarUma repetição pode levar tempo exponencial com uma entrada longa que quase corresponde; o cartão diz de que tipo (RX001) e que o Ctrl+. oferece correções.
✕ inválidoO mecanismo rejeita o padrão; o cartão mostra a mensagem dele: O .NET não aceita este padrão: …

“Seguro” significa só isto: o .NET aceita o padrão e ele não pode travar. Não significa que ele corresponda ao que você pretende — para isso servem os exemplos e o testador.

Sublinhado dos grupos

Cada grupo de captura de um padrão ganha uma linha fina na sua cor direto no código — a mesma cor do cartão. Um padrão longo com cinco grupos pode ser lido de relance: qual parte é o ano, qual é o id.

Um grupo dentro de outro fica um pouco mais abaixo, para que as duas linhas continuem visíveis. As cores seguem em ordem: salmão, verde, azul, violeta, âmbar, verde-azulado — e de novo.

O sublinhado pode ser desativado nas configurações: Sublinhar grupos de captura.

Padrões que podem travar

Alguns padrões levam tempo exponencial com uma string longa que quase corresponde — o jeito clássico de uma regex congelar uma requisição web. O RegexSmith os encontra pela forma e coloca um sublinhado ondulado de aviso sob a repetição; passe o mouse sobre ele para ver o motivo.

Um sublinhado ondulado RX001 sob ([a-z0-9]+\.?)+ com o menu Ctrl+. aberto e uma prévia da correção: o padrão antigo riscado, o novo com um grupo atômico

O que é sublinhado (RX001)

Não dentro de grupos atômicos ou lookarounds, e nunca com RegexOptions.NonBacktracking — ali isso não pode acontecer.

Correções no Ctrl+.

Coloque o cursor sobre o sublinhado ondulado e pressione Ctrl+. — cada correção mostra uma prévia: o padrão antes (riscado) e depois.

CorreçãoO que faz
Tornar atômica a repetição interna: (?>…)Envolve a repetição interna em (?>…). As mesmas cadeias correspondem; a repetição não pode mais ser dividida de muitas formas.
Usar RegexOptions.NonBacktracking (.NET 7+)Adiciona a opção à chamada. Tempo linear com qualquer entrada; requer .NET 7 ou posterior. Oferecida só quando o padrão permite — sem referências inversas, lookarounds, grupos atômicos ou de balanceamento, condicionais.
Testar este padrão no RegexSmithAbre o padrão no testador — oferecida sobre qualquer padrão, não só sobre um arriscado.

O RX001 pode ser desativado nas configurações (Dicas no editor) ou com Não mostrar este tipo de dica na dica de ferramenta; as correções do Ctrl+. continuam.

O testador

O Testador do RegexSmith abre encaixado ao lado de Localizar Resultados. O padrão vem do código e continua vinculado a ele: experimente-o com seus próprios exemplos, altere-o e grave-o de volta.

O Testador do RegexSmith: o link para a origem, o padrão, a linha de status, os botões de opções, exemplos com expectativas e grupos destacados, uma linha errada em vermelho, a tabela de grupos e os botões

Como abrir

O padrão e as suas opções

No topo, o arquivo e a linha do padrão — clique para ir até lá. Abaixo, a caixa do padrão, a linha de status (✓ seguro, ⚠ pode travar ou o erro do mecanismo, e depois N de M conforme esperado · ms) e os botões de opções: IgnoreCase, Multiline, Singleline, IgnorePatternWhitespace, ExplicitCapture, RightToLeft, CultureInvariant. Qualquer alteração executa tudo de novo na hora.

Exemplos e expectativas

Na primeira vez, os exemplos do cartão já estão lá: dois que devem corresponder e um que não deve. Digite um novo em Adicione um exemplo e pressione Enter…; clique em um exemplo para editá-lo, ✕ o remove. A marca antes de cada exemplo diz o que ele deve fazer — clique nela para mudar:

Na telaSignificado
✓deve corresponder
✗não deve corresponder
–sem expectativa, apenas mostrar

Um exemplo que faz o contrário fica vermelho — ✗ corresponde ou ✗ não corresponde — e assim os exemplos viram uma pequena especificação do padrão. As correspondências ficam coloridas, os grupos sublinhados nas suas cores e os espaços aparecem como pontos. Uma execução que leva mais de 1 segundo é interrompida com ⏱ lento demais.

Grupos do exemplo selecionado lista cada correspondência do exemplo selecionado: a correspondência inteira e depois cada grupo com o seu valor e posição (não capturado quando ele não participou).

Substituir

A aba Substituir adiciona uma caixa de substituição — $1, ${name}, $$ para um $ — e mostra o resultado de cada exemplo, como o Regex.Replace faria.

Copiar, reverter, aplicar

Copiar como teste de unidade coloca na área de transferência um teste com os seus exemplos, para xUnit, NUnit ou MSTest — a especificação vai para o projeto de testes.

Reverter volta ao padrão e às opções do código; os exemplos permanecem.

Aplicar ao código grava o padrão de volta como o mesmo tipo de literal que era (normal, literal ou bruto) junto com as opções — um Desfazer o reverte. Se esse código mudou depois que o testador o abriu, nada é gravado: abra o testador a partir do padrão de novo.

Os exemplos são lembrados por padrão e por solução em %LocalAppData%\RegexSmith\samples, então na próxima vez eles já estão lá. Nada vai para o repositório.

Configurações

Ferramentas › Opções › SmithWorks › RegexSmith. Cada opção tem uma breve descrição do que faz.

OpçãoPadrão
Explicar padrões ao passar o mouseativado
Sublinhar grupos de capturaativado
RX001 Retrocesso catastróficoativado
Pedir uma avaliação no Marketplaceativado

Na parte de baixo: Restaurar padrões, Documentação, Avaliar no Marketplace e Enviar comentários.

As configurações ficam em %LocalAppData%\RegexSmith.

A página de opções do RegexSmith
A página de opções.

Perguntas frequentes

O RegexSmith envia algum dado?

Não. Os padrões são lidos do documento aberto e executados no seu computador; os exemplos ficam em %LocalAppData%\RegexSmith. Sem requisições de rede, sem telemetria.

O cartão diz “✓ seguro”. O padrão está certo?

Não necessariamente. “Seguro” significa que o .NET aceita o padrão e nenhuma repetição nele pode causar backtracking catastrófico. Se ele corresponde ao que você pretende, quem mostra são os exemplos: marque-os com ✓ ou ✗ no testador.

Por que não aparece cartão sobre o meu padrão?

O cartão aparece sobre um literal de string que o RegexSmith sabe que é um padrão: o argumento de new Regex, de um método estático de Regex, de [GeneratedRegex] ou de [RegularExpression], ou uma constante do mesmo arquivo usada ali. Um padrão montado em tempo de execução (concatenado, lido das configurações) não pode ser lido. Verifique também Explicar padrões ao passar o mouse nas configurações.

Qual mecanismo de regex é usado?

O mecanismo de regex do .NET em que o próprio Visual Studio roda, com as opções da chamada. RegexOptions.NonBacktracking (.NET 7+) também é lido da chamada; os exemplos então rodam no mecanismo normal, e as mesmas strings correspondem de qualquer forma.

Aplicar ao código não fez nada.

O código do padrão mudou depois que o testador o abriu, então o RegexSmith não grava em um lugar que talvez não contenha mais o padrão — o testador avisa isso abaixo dos botões. Abra o testador a partir do padrão de novo. Onde o código não tem lugar para opções ([RegularExpression] não aceita nenhuma), o padrão é gravado e as opções não.

Funciona em VB.NET, JavaScript ou TypeScript?

Não na 1.0: só C#. Outras linguagens usam outros mecanismos; peça no repositório Feedback se precisar de alguma.

Onde relato um problema ou sugiro um recurso?

Abra uma issue no repositório Feedback no GitHub — há formulários para bugs e ideias (troque nomes privados). Você também pode usar a aba Q&A no Marketplace.

Histórico de alterações

1.0.1

1.0.0