DocumentosImagensMídiaFerramentas PDF

Explicador Regex Online

Converta padrões regex para linguagem humana, direto no seu navegador.

//
1Start of string
2One of: A, -, Z, a, -, z, 0, -, 9, ., _, %, +, -, one or more times
3Literal "@"
4One of: A, -, Z, a, -, z, 0, -, 9, ., -, one or more times
5Escaped character: \.
6One of: A, -, Z, a, -, z, at least 2 times
7End of string
Processed in your browser

Explicador de expressões regulares

Todos os dialetos

Compatível com padrões de JavaScript, Python, PCRE, Java, Go e Ruby.

100% privado

A análise do padrão ocorre no seu navegador. Seus dados nunca saem do seu dispositivo.

Explicação clara

Cada token do padrão explicado em linguagem natural, com exemplos de correspondência.

Instantâneo

Explicação em tempo real enquanto você digita. Sem cadastro, sem espera.

Três passos, sem complicação

1

Cole sua expressão regular

Digite ou cole o padrão regex que você quer entender, com ou sem delimitadores.

2

Explicação instantânea

A ferramenta analisa o padrão e descreve em português o que cada parte faz: grupos, quantificadores, classes de caracteres e muito mais.

3

Teste com texto real

Insira um texto de exemplo para ver quais partes correspondem ao padrão em tempo real.

Ficou com dúvidas?

Uma expressão regular é uma linguagem de padrões para pesquisar e manipular texto. Ela permite descrever com precisão um padrão: por exemplo, um número de telefone, um endereço de e-mail ou uma URL. O motor de regex percorre o texto procurando strings que correspondam a esse padrão. São suportadas por praticamente todas as linguagens de programação modernas.

E-mail: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. URL: https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}. Telefone internacional: \+?[1-9]\d{1,14}. Somente dígitos: ^\d+$. CEP brasileiro: ^\d{5}-?\d{3}$.

As regex são extremamente concisas: cada caractere tem um significado especial potencial. O ponto (.) corresponde a qualquer caractere. O asterisco (*) significa zero ou mais vezes. Os colchetes ([]) definem classes de caracteres. Essa densidade de informações faz com que uma expressão de 20 caracteres possa representar regras muito complexas, mas também torna a leitura difícil à primeira vista sem prática.

PCRE (Perl Compatible Regular Expressions) é o padrão de fato para PHP, Apache e nginx. JavaScript tem seu próprio motor com diferenças: versões antigas não suportam lookbehind de comprimento variável, e possui a flag /u para Unicode. Python usa o módulo re com sintaxe similar à PCRE, mas com algumas diferenças (por exemplo, \A e \Z para início/fim de string). Go usa RE2, que não suporta backreferences por razões de desempenho. Java usa java.util.regex com sintaxe POSIX estendida.

Os caracteres com significado especial em regex são: . * + ? ^ $ { } [ ] | ( ) \. Para usá-los literalmente, escape com barra invertida: \. para um ponto literal, \* para um asterisco literal. Em JavaScript dentro de uma string, você precisa de duplo escape: '\\.' porque a string já consome uma barra. Muitas linguagens oferecem funções como re.escape() em Python ou preg_quote() em PHP.

História das expressões regulares (Ken Thompson 1968, editor ed), teoria das linguagens formais e regex na programação moderna

As expressões regulares têm sua origem na teoria das linguagens formais desenvolvida pelo matemático Stephen Kleene nos anos 1950, que definiu os conjuntos regulares e a notação algébrica para descrevê-los. Ken Thompson foi o primeiro a implementar regex em software quando as integrou ao editor de texto ed do Unix em 1968 (e posteriormente no grep, cujo nome vem de global regular expression print). Sua implementação usava compilação para código de máquina para buscas eficientes, uma técnica que estabeleceu as bases dos motores de regex modernos.

A popularização em massa das regex veio com o Perl nos anos 1980 e 1990. Larry Wall integrou regex nativamente na sintaxe da linguagem, e as PCRE (Perl Compatible Regular Expressions) se tornaram o padrão de fato. O POSIX formalizou dois níveis: BRE (Basic Regular Expressions) e ERE (Extended Regular Expressions) no padrão de 1992. Hoje, praticamente todas as linguagens de programação incluem suporte a regex: Python (módulo re), JavaScript (RegExp), Java (java.util.regex), Go (regexp/RE2), Ruby, PHP (preg_*) e muitos outros.

As regex são uma ferramenta de dois gumes: extremamente poderosas, mas também fonte de vulnerabilidades. O ReDoS (Regular Expression Denial of Service) é um tipo de ataque em que um padrão regex mal escrito pode causar tempo de execução exponencial com certos inputs maliciosos. O motor RE2 do Google (usado em Go) foi projetado especificamente para garantir tempo de execução linear, eliminando a possibilidade de ReDoS ao custo de não suportar backreferences. O OWASP inclui o ReDoS em sua lista de riscos de segurança em aplicações web.