# Referência Rápida de Expressões Regulares

*Padrões, quantificadores, grupos, lookaheads, flags*

> Source: Regular Expressions Reference (regular-expressions.info) · MIT

## Padrões Básicos

### Metacaracteres

| Command | Description |
|---------|-------------|
| `.` | 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

| Command | Description |
|---------|-------------|
| `[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

| Command | Description |
|---------|-------------|
| `\d` | Dígito `[0-9]` |
| `\D` | Não dígito `[^0-9]` |
| `\w` | Caractere de palavra `[a-zA-Z0-9_]` |
| `\W` | Não caractere de palavra |
| `\s` | Espaço em branco `[ \t\n\r\f]` |
| `\S` | Não espaço em branco |

## Quantificadores

### Quantificadores Gananciosos

| Command | Description |
|---------|-------------|
| `*` | 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

| Command | Description |
|---------|-------------|
| `*?` | 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: "<b>bold</b>"
<.+?>     # lazy:   "<b>"
```

## Âncoras

| Command | Description |
|---------|-------------|
| `^` | Início da string (ou linha com flag `m`) |
| `$` | Fim da string (ou linha com flag `m`) |
| `\b` | Limite de palavra |
| `\B` | Não limite de palavra |
| `\A` | Início da string (não afetado por `m`) |
| `\Z` | Fim 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

| Command | Description |
|---------|-------------|
| `(pattern)` | Grupo de captura |
| `(?:pattern)` | Grupo não capturante |
| `(?P<name>pat)` | Grupo nomeado (Python) |
| `(?<name>pat)` | Grupo nomeado (JS, .NET) |
| `\1  \2` | Referência retroativa ao grupo 1, 2 |
| `a\|b` | Alternância: a ou b |

## Lookahead e Lookbehind

| Command | Description |
|---------|-------------|
| `(?=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 "$"
(?<!\$)\d+      # digits NOT preceded by "$"
```

*Lookarounds correspondem a uma posição sem consumir caracteres*

## Padrões Comuns

| Command | Description |
|---------|-------------|
| `\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

| Command | Description |
|---------|-------------|
| `g` | Global: encontrar todas as correspondências, não apenas a primeira |
| `i` | Correspondência insensível a maiúsculas |
| `m` | Multilinha: `^` / `$` correspondem a limites de linha |
| `s` | Dotall: `.` também corresponde à nova linha |
| `x` | Verbose: ignorar espaços em branco, permitir comentários |
| `u` | Unicode: 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)
```
