Cheatsheet de regex
As expressões regulares são compactas o suficiente para que a sintaxe seja mais fácil de consultar do que de decorar. Esta página é a totalidade dela num só ecrã — classes, quantificadores, âncoras, grupos, lookaround, escape e as flags — com um exemplo prático para cada linha.
A variante é a do JavaScript, que é o que corre no seu navegador e o que o testador de regex deste site usa. A maior parte é idêntica em Python, Java, Go e PCRE; onde as variantes divergem, divergem nas margens — o suporte de lookbehind, a sintaxe dos grupos nomeados e se \d significa "dígito ASCII" ou "qualquer dígito Unicode".
Duas coisas explicam a maioria das surpresas. Os quantificadores são gananciosos: agarram tudo o que podem e só devolvem quando o resto do padrão falha, e é por isso que <.+> engole duas tags e <.+?> não. E a alternância é a que liga mais fraco de todas, por isso ^a|b$ significa "começa por a, ou termina por b" — não o que a maioria das pessoas pretende quando o escreve.
Classes de caracteres
11As abreviaturas limitam-se a ASCII, a não ser que acrescente a flag u e use escapes de propriedade Unicode.
| Sintaxe | Significado | Exemplo |
|---|---|---|
| . | Qualquer caractere exceto uma quebra de linhaAcrescente a flag s para que também corresponda a mudanças de linha. | /a.c/"abc" → "abc" |
| \d | Um dígito, 0–9 | /\d+/"order 42" → "42" |
| \D | Tudo o que não seja um dígito | /\D+/"42abc" → "abc" |
| \w | Letra, dígito ou underscoreApenas ASCII — "é" não é \w. | /\w+/"user_1!" → "user_1" |
| \W | Tudo aquilo a que \w não corresponde | /\W+/"a++b" → "++" |
| \s | Qualquer espaço em branco, incluindo tabulações e mudanças de linha | /\s+/"a \t b" → " \t " |
| \S | Qualquer caractere que não seja espaço em branco | /\S+/" hi" → "hi" |
| [abc] | Qualquer um dos caracteres listados | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Qualquer caractere exceto os listados | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Um intervalo de caracteres | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Qualquer letra Unicode (precisa da flag u) | /\p{L}+/"42 café" → "café" |
Quantificadores
7Todos estes são gananciosos por predefinição: agarram o máximo que podem e só devolvem se o resto do padrão falhar.
| Sintaxe | Significado | Exemplo |
|---|---|---|
| * | Zero ou mais | /ab*/"a" → "a" |
| + | Um ou mais | /ab+/"abbb" → "abbb" |
| ? | Zero ou um — torna-o opcional | /colou?r/"color" → "color" |
| {3} | Exatamente três | /\d{3}/"id 12345" → "123" |
| {2,} | Dois ou mais | /a{2,}/"aaa" → "aaa" |
| {2,4} | Entre dois e quatro | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Preguiçoso — agarra o mínimo possívelO ganancioso <.+> engoliria ambas as tags. | /<.+?>/"<a><b>" → "<a>" |
Âncoras e limites
4Estes correspondem a uma posição, não a um caractere, pelo que não consomem nada.
| Sintaxe | Significado | Exemplo |
|---|---|---|
| ^ | Início da cadeia, ou de uma linha com a flag m | /^a/"abc" → "a" |
| $ | Fim da cadeia, ou de uma linha com a flag m | /c$/"abc" → "c" |
| \b | Um limite de palavraÉ isto que impede "cat" de corresponder dentro de "concatenate". | /\bcat\b/"the cat sat" → "cat" |
| \B | Não é um limite de palavra | /\Bcat/"concatenate" → "cat" |
Grupos e alternância
5| Sintaxe | Significado | Exemplo |
|---|---|---|
| (abc) | Grupo de captura — memorizado para substituição | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Agrupamento sem capturaUse isto quando só precisa do agrupamento; mantém os números de captura com significado. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Grupo de captura nomeado | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Qualquer um dos lados — alternânciaA alternância tem a precedência mais baixa: ^a|b$ é "^a" ou "b$", não "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Referência regressiva ao primeiro grupo | /(\w)\1/"letter" → "tt" |
Lookaround
4Asserções sobre o que rodeia uma posição. Não correspondem a nada em si, e é isso que as torna seguras de combinar.
| Sintaxe | Significado | Exemplo |
|---|---|---|
| (?=…) | Lookahead — seguido por isto | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Lookahead negativo — não seguido por isto | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — precedido por isto | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Lookbehind negativo — não precedido por isto | /(?<!\$)\b\d+/"about 40" → "40" |
Escape
5Estes doze caracteres são os que precisam de uma barra invertida para serem tomados literalmente.
| Sintaxe | Significado | Exemplo |
|---|---|---|
| \. | Um ponto literal | /\d\.\d/"v2.5" → "2.5" |
| \\ | Uma barra invertida literal | /\\/"C:\\dir" → "\\" |
| \n | Um avanço de linha | /a\nb/"a\nb" → "a\nb" |
| \t | Uma tabulação | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Um caractere pelo seu ponto de código | /\u00e9/"café" → "é" |
Flags
6| Flag | Nome | Significado |
|---|---|---|
| g | Global | Encontra todas as correspondências, não apenas a primeira. |
| i | Ignorar maiúsculas/minúsculas | Corresponde independentemente de ser maiúscula ou minúscula. |
| m | Multilinha | Faz com que ^ e $ correspondam em cada quebra de linha, em vez de apenas nas extremidades da cadeia. |
| s | Dot all | Permite que . corresponda também a quebras de linha. |
| u | Unicode | Trata o padrão como pontos de código e ativa os escapes de propriedade \p{…}. |
| y | Sticky | Corresponde apenas exatamente em lastIndex, sem nunca procurar para a frente. |