133 expressões regulares
Da notação até verificar e-mails, datas e endereços. Cada expressão vem com exemplos que devem casar e outros que não, e os testes realmente os executam.
Notação28
Como apontar para um único caractere. Todo o resto se apoia nisso.
\dum dígito\Dtudo menos um dígito\wletra, dígito ou sublinhado\Wo que não é caractere de palavra\sum espaço em branco\Studo menos um espaço^.$um caractere qualquer^[a-z]+$só minúsculas^[A-Z]+$só maiúsculas^[A-Za-z0-9]+$só letras e dígitos^[^0-9]+$texto sem nenhum dígito^[가-힣]+$só hangul^[ぁ-んァ-ヶー]+$só kana^[\u4e00-\u9fff]+$só caracteres chineses^a\.b$um ponto literal^a/b$uma barra literal\tuma tabulação\numa quebra de linha\r\numa quebra de linha do Windows^\u00e9$um caractere escrito por ponto de código^Hellotexto que começa com esta palavraworld$texto que termina nesta palavra^cat$exatamente esta palavra e nada mais\bcat\ba palavra sozinha, não dentro de outra\Bcata palavra só dentro de outra^cat$uma correspondência que ignora maiúsculas^bo início de cada linha, não só do texto^a.b$qualquer caractere, quebras de linha incluídasRepetições e grupos17
Quantas vezes algo se repete e o que conta como uma unidade.
^ab*c$nenhuma ou muitas vezes^ab+c$uma vez ou mais^colou?r$uma letra que pode estar ou não^\d{4}$exatamente quatro dígitos^\d{2,4}$entre dois e quatro dígitos^\d{2,}$dois dígitos ou mais<.+?>uma etiqueta, o mais curta possível^<.+>$um bloco, o mais longo possível^(?:cat|dog)$uma de duas palavras^(?:ab)+$um grupo de duas letras, repetido^(\d{3})-(\d{4})$duas partes capturadas separadamente^(?:\d{3}-)+\d{4}$agrupar sem capturar^(?<year>\d{4})-(?<month>\d{2})$capturar com um nome(\w)\1o mesmo caractere duas vezes seguidas\b(\w+)\s+\1\ba mesma palavra escrita duas vezes^(?:https?://)?example\.com$um endereço com ou sem o esquema^(?:\d{1,3}\.){3}\d{1,3}$um endereço de quatro partesOlhar em volta8
Verifica o que está antes ou depois sem consumir. Serve para empilhar condições.
\d+(?= dollars)um número seguido de certa palavra^(?!admin$).+$qualquer coisa menos esta palavra(?<=\$)\d+um número precedido de certo sinal(?<!\$)\b\d+um número sem esse sinal na frente^(?=.*[A-Z])(?=.*\d)(?=.*[a-z]).{8,}$oito ou mais com maiúscula, minúscula e dígito^(?!.* ).+$texto sem nenhum espaço duplo^(?=.*@).+$texto que precisa conter este sinal\B(?=(\d{3})+(?!\d))o ponto onde entra a vírgula de milharVerificar a cadeia inteira44
Ancorado nas duas pontas: a cadeia inteira precisa casar. É o que a validação usa.
^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$um endereço de e-mail^https?://[^\s/$.?#][^\s]*$um endereço web^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$um nome de domínio^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$um endereço IPv4^(?:[0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$um endereço IPv6 escrito por extenso^(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}$um endereço MAC^(?:6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]?\d{1,4})$um número de porta^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$um UUID^#(?:[0-9a-f]{3}|[0-9a-f]{6})$um código de cor hexadecimal^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$um valor de cor rgb()^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$uma data em formato ISO^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$uma data escrita com barras^(?:[01]\d|2[0-3]):[0-5]\d$uma hora no formato de 24 horas^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$uma hora com am ou pm^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$um carimbo de tempo ISO completo^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$uma duração ISO^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$um número de versão semântica^\d+$um inteiro sem sinal^[+-]?\d+$um inteiro que pode ter sinal^-?\d+(?:\.\d+)?$um número que pode ter decimais^-?\d+(?:\.\d+)?[eE][+-]?\d+$um número em notação científica^(?:100(?:\.0+)?|\d{1,2}(?:\.\d+)?)%$uma porcentagem de 0 a 100^\d{1,3}(?:,\d{3})*$um número agrupado com vírgulas^[$€£¥₩]\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?$um valor com símbolo de moeda^[0-9a-f]+$uma cadeia hexadecimal^[01]+$uma cadeia só de 0 e 1^[0-7]+$uma cadeia octal^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$uma cadeia codificada em base64^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]*$um JWT dividido por dois pontos^\+[1-9]\d{7,14}$um número de telefone em forma internacional^[a-z][a-z0-9_]{2,15}$um usuário que começa com letra^[a-z0-9]+(?:-[a-z0-9]+)*$um slug de URL^[^\\/:*?"<>|]+\.[a-z0-9]+$um nome de arquivo com extensão^.+\.(?:jpe?g|png|gif|webp|avif|svg)$uma extensão de arquivo de imagem^/(?:[^/\0]+/)*[^/\0]*$um caminho estilo Unix^[A-Za-z]:\\(?:[^\\/:*?"<>|]+\\)*[^\\/:*?"<>|]*$um caminho do Windows^</?[a-z][a-z0-9]*(?:\s[^<>]*)?/?>$uma etiqueta HTML^\.-?[_a-z][_a-z0-9-]*$um seletor de classe CSS^M{0,3}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|V?I{0,3})$um numeral romano^-?(?:90(?:\.0+)?|[1-8]?\d(?:\.\d+)?)$um valor de latitude^-?(?:180(?:\.0+)?|1[0-7]\d(?:\.\d+)?|\d{1,2}(?:\.\d+)?)$um valor de longitude^(?:0|[1-9]\d*)$um número sem zero à esquerda^\d*[02468]$um número par^\s*$uma linha em brancoBuscar e limpar36
Para extrair ou apagar só a parte de que você precisa de um texto maior.
\s+$espaço sobrando no fim^\s+espaço no início^\s+|\s+$espaço nas duas pontas\s{2,}dois ou mais espaços seguidos\n\s*\numa linha vazia entre duas\D+tudo o que não é dígito[^\x00-\x7F]um caractere fora do ASCII[\x00-\x1F]um caractere de controle invisível</?[^>]+>as etiquetas HTML de um texto<!--[\s\S]*?-->um comentário HTML//.*$um comentário que começa com duas barras/\*[\s\S]*?\*/um comentário de várias linhas"[^"\\]*(?:\\.[^"\\]*)*"texto entre aspas duplas'[^'\\]*(?:\\.[^'\\]*)*'texto entre aspas simples\[([^\]]+)\]\(([^)]+)\)um link Markdown^#{1,6}\s+.+$uma linha de título Markdown(?:^|\s)#([a-z0-9_]+)uma hashtag(?:^|\s)@([a-z0-9_]{2,})uma menção com arroba[?&]([^=&]+)=([^&]*)um parâmetro de consulta de uma URLhttps?://[^\s<>"]+uma URL dentro de um texto comum^https?://([^/:?#]+)só o domínio de uma URL\.([a-z0-9]+)$a extensão de um nome de arquivo(?<=[a-z0-9])(?=[A-Z])a junção entre palavras em camelCase_([a-z])a letra que segue um sublinhado-([a-z])a letra que segue um hífen(?:^|,)("(?:[^"]|"")*"|[^,]+)um campo separado por vírgulas^([^=]+)=(.*)$um nome e valor separados por igual^\s*(\S+)a primeira palavra(\S+)\s*$a última palavra\d+grupos de dígitos dentro de um texto\b\w+\bcada palavra, uma a uma\[([^\]]*)\]o que está entre colchetes\(([^)]*)\)o que está entre parênteses[\uD800-\uDBFF][\uDC00-\uDFFF]um emoji que ocupa duas unidades(.)\1{2,}o mesmo caractere três vezes ou mais,\s*([}\]])uma vírgula antes de fecharComo ler
- Com ^ e $ em volta, a cadeia inteira precisa casar; sem eles, a correspondência pode estar em qualquer lugar. Ancore sempre o que usar para validar.
- Os parênteses ( ) capturam o que envolvem. Se você só precisa agrupar, escreva (?: ) para a numeração não se deslocar.
- Cada expressão aqui é conferida com seus exemplos. Ainda assim, "parece um e-mail" e "é uma caixa real" são coisas diferentes.
- Repetições abertas aninhadas como (a+)+ podem explodir com certas entradas. Procure esse formato antes de colar uma expressão alheia.
Perguntas frequentes
Q. O que é uma expressão regular?
Uma pequena linguagem para descrever a forma que você procura num texto. Escrever \d{4} em vez de "quatro dígitos" faz o programa achar cada lugar com essa forma. JavaScript, Python, Java e quase todas usam a mesma notação.
Q. Por que a verificação de e-mail é tão curta?
Um padrão que cubra toda a especificação tem milhares de caracteres e mesmo assim não diz se a caixa existe. Pegar erros de digitação é o que a expressão regular consegue; a checagem real é enviar uma mensagem de confirmação.
Q. Por que os padrões mudam entre linguagens?
O núcleo é o mesmo, os detalhes não. JavaScript não tem \A, e Python precisa ligar re.MULTILINE à parte. Tudo aqui foi escrito para rodar como está em JavaScript.
Q. O que significa um padrão poder ser lento?
Quando repetições abertas se aninham, como (a+)+, o número de retrocessos explode com entradas que não casam. Uma cadeia curta pode levar segundos, o que é perigoso num servidor.
Q. Posso confiar nestes padrões?
Cada um é guardado com exemplos que devem casar e outros que não, e os testes rodam os 133 de verdade. Os exemplos que você vê são os mesmos dos testes, então a descrição não pode se afastar do padrão.