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ção36
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ídas^\p{L}+$letras de qualquer alfabeto^\p{Extended_Pictographic}+$só pictogramas^[\u0400-\u04FF]+$só letras cirílicas^\x41$um caractere escrito em hexadecimal^[ㄱ-ㅎㅏ-ㅣ]+$apenas jamo do hangul^[-]+$apenas escrita tailandesa^[-ۿ]+$apenas escrita árabe^[0-9]+$apenas dígitos de largura totalRepetições e grupos24
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 partes^\d{0,3}$no máximo três dígitos^\w{3,8}$entre três e oito caracteres de palavra^(?:\w+\.){2}\w+$três partes separadas por pontos^/[a-z]+/?$um caminho cuja barra final é opcional^(cat|dog)$exatamente uma de duas palavras^(ab){3}$um grupo repetido exatamente três vezes^[a-c]{2,4}$de dois a quatro caracteres de um conjuntoOlhar em volta14
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 milhar^(?!.*(.)\1).+$nenhum caractere repetido em seguida(?<=₩)\d+os dígitos que seguem o símbolo do won^(?!.*\btest\b).*$uma linha que não contém certa palavra^(?!test)\w+$o que não começa por uma palavra dada^.*(?<=\.png)$o que termina com um sufixo dado^(?!.*\d\d).*$texto sem dois dígitos seguidosVerificar a cadeia inteira66
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 branco^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$um número de semana ISO, até a 53^#(?:[0-9a-f]{4}|[0-9a-f]{8})$uma cor hexadecimal com canal alfa^\d{4}(?:[ -]?\d{4}){3}$um número de cartão em quatro blocos de quatro^[A-Z]{3}$um código de moeda de três letras^0x[0-9a-f]+$um número hexadecimal com o prefixo 0x^[0-9a-f]{64}$um hash de sessenta e quatro caracteres^[0-9a-f]{24}$um identificador de documento de vinte e quatro caracteres^\d{5}$um código postal de cinco dígitos^[A-Z]{2}$um código de país de duas letras^(\d{1,3}\.){3}\d{1,3}/\d{1,2}$um endereço IPv4 com prefixo CIDR^01[016789]-?\d{3,4}-?\d{4}$um número de telemóvel coreano^[가-힣]{2,5}$um nome em hangul de duas a cinco sílabas^\d{5}(-\d{4})?$um código postal dos EUA^([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?::([0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4})*)?$um endereço IPv6 abreviado^\d{3}-\d{2}-\d{5}$um número de registo comercial coreano^[a-z]+\/[a-zA-Z0-9][a-zA-Z0-9.+-]*$um tipo MIME^data:[a-z]+\/[a-z0-9.+-]+;base64,[A-Za-z0-9+/]+=*$um URI data: em base64^(\S+\s+){4}\S+$uma expressão cron de cinco campos^[A-Za-z]:\\.*$um caminho de unidade do Windows^[\^~]?\d+\.\d+\.\d+$um intervalo semver com ^ ou ~^(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3})$uma faixa IPv4 privada^[A-Z][a-zA-Z0-9]*$um nome em PascalCaseBuscar e limpar49
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 fechar\*\*([^*]+)\*\*texto em negrito entre dois asteriscos`([^`]+)`código entre crases(\w+)="([^"]*)"um atributo cujo valor vai entre aspas\x1b\[[0-9;]*mum código de escape de cor do terminalfrom ['\"]([^'\"]+)['\"]o caminho de um import#[0-9a-fA-F]{6}\buma cor hexadecimal dentro do textoTODO:?\s*(.*)uma nota TODO num comentário\d+(px|em|rem|%)um número com unidade CSS!\[([^\]]*)\]\(([^)]+)\)uma imagem de Markdown^[-*+]\s+(.+)$um item de lista Markdown--[^\n]*um comentário de linha SQL\$\{?([A-Z_][A-Z0-9_]*)\}?uma variável de ambiente do shell[A-Za-z0-9_-]{11}um id de vídeo do YouTubeComo 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
QO 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.
QPor 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.
QPor 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.
QO 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.
QPosso 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.