Padrões Básicos
Metacaracteres
.Qualquer caractere (exceto nova linha)
^Início da string / linha
$Fim da string / linha
*0 ou mais do anterior
+1 ou mais do anterior
?0 ou 1 do anterior (opcional)
\Escapar metacaractere
Correspondência Literal
hello # matches "hello" exactly a.c # matches "abc", "a1c", "a-c", etc. \.txt # matches literal ".txt"
Classes de Caracteres
Expressões de Colchetes
[abc]Corresponder a, b ou c
[^abc]Corresponder a qualquer coisa exceto a, b, c
[a-z]Letra minúscula
[A-Z]Letra maiúscula
[0-9]Dígito
[a-zA-Z0-9]Alfanumérico
Classes Abreviadas
\dDígito [0-9]
\DNão dígito [^0-9]
\wCaractere de palavra [a-zA-Z0-9_]
\WNão caractere de palavra
\sEspaço em branco [ \t\n\r\f]
\SNão espaço em branco
Quantificadores
Quantificadores Gananciosos
*0 ou mais (ganancioso)
+1 ou mais (ganancioso)
?0 ou 1 (ganancioso)
{n}Exatamente n vezes
{n,}n ou mais vezes
{n,m}Entre n e m vezes
Quantificadores Preguiçosos
*?0 ou mais (preguiçoso / não ganancioso)
+?1 ou mais (preguiçoso)
??0 ou 1 (preguiçoso)
{n,m}?Entre n e m (preguiçoso)

Quantificadores preguiçosos correspondem ao menor número de caracteres possível

Ganancioso vs Preguiçoso
<.+> # greedy: "bold" <.+?> # lazy: ""
Âncoras
^Início da string (ou linha com flag m)
$Fim da string (ou linha com flag m)
\bLimite de palavra
\BNão limite de palavra
\AInício da string (não afetado por m)
\ZFim da string (não afetado por m)
Exemplos de Âncoras
^Hello # starts with "Hello" world$ # ends with "world" \bword\b # "word" as whole word \Bword\B # "word" inside another word
Grupos e Alternância
Grupos de Captura
(abc) # capture group: match "abc" (a|b|c) # alternation: a or b or c (cat|dog) # match "cat" or "dog" (\d{3})-(\d{4}) # groups: "123-4567"
Tipos de Grupo
(pattern)Grupo de captura
(?:pattern)Grupo não capturante
(?P<name>pat)Grupo nomeado (Python)
(?<name>pat)Grupo nomeado (JS, .NET)
\1 \2Referência retroativa ao grupo 1, 2
a|bAlternância: a ou b
Lookahead e Lookbehind
(?=pattern)Lookahead positivo
(?!pattern)Lookahead negativo
(?<=pattern)Lookbehind positivo
(?<!pattern)Lookbehind negativo
Exemplos de Lookaround
\d+(?= USD) # digits followed by " USD" \d+(?! USD) # digits NOT followed by " USD" (?<=\$)\d+ # digits preceded by "$" (?# digits NOT preceded by "$"

Lookarounds correspondem a uma posição sem consumir caracteres

Padrões Comuns
\d{1,3}(\.\d{1,3}){3}Endereço IPv4 (básico)
[\w.+-]+@[\w-]+\.[\w.]+E-mail (básico)
https?://[\w./\-?&#=]+URL (básico)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}Número de telefone dos EUA
\d{4}-\d{2}-\d{2}Data (AAAA-MM-DD)
#?[0-9a-fA-F]{6}Código de cor hexadecimal

Estes são padrões simplificados; uso em produção pode exigir validação mais rigorosa

Flags
gGlobal: encontrar todas as correspondências, não apenas a primeira
iCorrespondência insensível a maiúsculas
mMultilinha: ^ / $ correspondem a limites de linha
sDotall: . também corresponde à nova linha
xVerbose: ignorar espaços em branco, permitir comentários
uUnicode: suporte completo a Unicode
Uso de Flags por Linguagem
/pattern/gi # JavaScript re.compile(r"pat", re.I | re.M) # Python grep -iE "pattern" # grep (extended)