Testador de Regex: monte e depure padrões contra o seu próprio texto
Uma expressão regular é uma minúscula linguagem para descrever o formato de um texto. Em vez de perguntar "esta palavra exata está aqui?", uma regex permite que você pergunte "existe uma string que se pareça com isto?". É isso que a torna poderosa para encontrar, validar, extrair e substituir texto em editores de código, arquivos de log, entradas de formulário e scripts. E também é o que a torna fácil de errar, porque um padrão que soa correto na sua cabeça pode, silenciosamente, casar demais, de menos ou nada.
É por isso que testar de forma interativa supera o chute. Quando você digita um padrão e observa as correspondências se acenderem por um texto de amostra real, recebe retorno imediato: vê o que foi capturado, o que escapou e qual grupo de captura pegou qual pedaço. Nosso Testador de Regex roda inteiramente no seu navegador. Seu padrão e seu texto de amostra nunca saem da página, então você pode colar linhas de log, e-mails ou dados de produção sem enviar nada para um servidor.

Os blocos de construção que vale conhecer
A maioria dos padrões do dia a dia é montada a partir de um pequeno conjunto de peças. Aprenda estas e você consegue ler a maior parte das regexes que encontrar por aí.
As classes de caracteres descrevem um conjunto de caracteres permitidos. [aeiou] casa com qualquer vogal única, [0-9] casa com um dígito e [a-zA-Z] casa com uma letra. Um circunflexo dentro dos colchetes nega o conjunto, então [^0-9] significa "qualquer caractere que não seja um dígito". Atalhos poupam digitação: \d é um dígito, \w é um caractere de palavra (letras, dígitos, sublinhado), \s é espaço em branco, e o ponto . casa com quase qualquer caractere único.
Os quantificadores dizem quantas vezes a peça anterior pode se repetir. * significa zero ou mais, + significa um ou mais, e ? significa zero ou um (opcional). Para contagens exatas, {3} significa exatamente três e {2,4} significa de dois a quatro. Assim, \d{4} casa com um ano de quatro dígitos e colou?r casa com as duas grafias.
As âncoras fixam um padrão a uma posição, e não a um caractere. ^ casa com o início do texto, $ casa com o fim, e \b marca uma fronteira de palavra. O padrão ^Error só casa com linhas que começam com "Error", que é exatamente o que você quer ao varrer logs.
Os grupos envolvem parte de um padrão entre parênteses, tanto para aplicar um quantificador a vários caracteres de uma vez quanto para capturar o texto casado e reutilizá-lo. Em (\d{4})-(\d{2})-(\d{2}) cada grupo captura um componente de data que você pode extrair depois. A alternância com a barra vertical age como um "ou": cat|dog|fish casa com qualquer uma das três palavras.
Padrões que você de fato vai usar
Algumas tarefas recorrentes cobrem a maior parte do trabalho real. Para capturar algo parecido com e-mail, [\w.+-]+@[\w-]+\.[\w.-]+ é um ponto de partida pragmático; a validação completa de e-mail conforme a especificação formal é notoriamente espinhosa, e um padrão frouxo costuma ser a escolha certa para destacar candidatos em vez de rejeitar usuários.
Para números, \d+ pega sequências de dígitos, enquanto -?\d+(\.\d+)? casa com negativos e decimais opcionais. Para aparar espaços em branco no início e no fim, case ^\s+|\s+$ e substitua por nada. Para encontrar palavras duplicadas, o padrão de retrorreferência \b(\w+)\s+\1\b casa com uma palavra seguida de si mesma, em que \1 remete ao primeiro grupo capturado.

As flags mudam o comportamento da correspondência
As flags são interruptores que modificam o padrão inteiro. A flag global (g) encontra todas as correspondências em vez de parar na primeira, que é o que você quer ao destacar todas as ocorrências. A flag insensível a maiúsculas (i) faz error casar com "Error" e "ERROR" igualmente. A flag multilinha (m) muda ^ e $ para que casem no início e no fim de cada linha, não apenas do texto inteiro, o que é essencial para trabalho com logs linha a linha. Outras flags úteis incluem s (dotall, que deixa o ponto casar com quebras de linha) e u para tratamento completo de Unicode.
Os dialetos diferem um pouco conforme a linguagem
Regex é uma família de dialetos, não um padrão único e fixo. JavaScript, Python, PCRE (PHP), Java, .NET, Go e Rust concordam na sintaxe central acima, mas divergem nas bordas: suporte a lookbehind, sintaxe de grupos nomeados ((?<name>...) versus (?P<name>...)), escapes de propriedade Unicode e quais flags existem variam todos. Um padrão que funciona em um motor pode precisar de um pequeno ajuste em outro, então compensa testar contra o dialeto com o qual você de fato trabalha. Quando você tiver um padrão afinado, nossas outras ferramentas para desenvolvedores e ferramentas de texto podem ajudar no trabalho ao redor de limpar, codificar e transformar os dados que você acabou de casar.
Perguntas frequentes
Meu texto é enviado a um servidor?
Não. O Testador de Regex roda inteiramente no seu navegador. Seu padrão e seu texto de amostra ficam no seu dispositivo e nunca são enviados, então é seguro colar dados sensíveis.
Qual dialeto de regex esta ferramenta usa?
Ela usa o motor de regex do JavaScript embutido no seu navegador. A sintaxe central corresponde ao que você conhece da maioria das linguagens, embora alguns recursos avançados difiram um pouco do PCRE, do Python ou do .NET.
Qual é a diferença entre correspondência gananciosa e preguiçosa?
Por padrão os quantificadores são gananciosos e pegam o máximo de texto possível. Adicionar um ponto de interrogação os torna preguiçosos, então pegam o mínimo possível. Por exemplo, o padrão ponto estrela é ganancioso, enquanto ponto estrela ponto de interrogação é preguiçoso.
Como faço para casar um caractere especial literal?
Escape-o com uma barra invertida. Para casar um ponto de verdade, escreva barra invertida ponto. O mesmo vale para outros metacaracteres, como parênteses, colchetes, o sinal de mais e o ponto de interrogação.
Por que meu padrão não casa com nada?
As causas comuns são uma flag global ausente, âncoras que fixam a correspondência na posição errada, um caractere especial não escapado ou quantificadores gananciosos ultrapassando o limite que você esperava. Teste pedaço por pedaço para achar o culpado.
Posso capturar partes da correspondência?
Sim. Envolva uma seção do padrão entre parênteses para criar um grupo de captura. Cada grupo é reportado separadamente, o que permite extrair campos como o ano, o mês e o dia de uma data.
