Expressões regulares
Classes, âncoras, quantificadores, alternância, capturas, referências, lookaround e backtracking.
Ler o padrão
Pesquisar tolera texto à volta; validar exige prender as pontas (^...$, ou \A...\z em PCRE).
| Peça | Casa com |
|---|---|
[abc], [^0-9] | Um caráter dentro, ou fora, do conjunto |
. | Um caráter, em geral sem quebra de linha |
\d, \w, \s | Dígito, palavra, espaço (conforme o motor) |
^, $, \b | Posição, não caráter |
?, *, +, {3}, {2,4} | Quantidades sobre a peça anterior |
a|b | Uma das alternativas |
(ab) / (?:ab) | Grupo com / sem captura |
ab+repeteb;(ab)+repete o par.^LTW|BD$prende cada alternativa de um lado;^(?:LTW|BD)$prende ambas.[A-Za-z]não cobre acentos; Unicode depende do motor.
Formato com captura
'LTW-042'.match(/^(?:LTW|BD)-([0-9]{3})$/);
// [0] LTW-042, [1] 042
LTW-42falha a repetição;xLTW-042falha a âncora. Formato válido não prova existência no catálogo nem data real (2026-02-31tem forma certa).\1no padrão repete o texto capturado (/(\w+)\s+\1/casarede rede, nãorede web).$1usa-o na substituição.
Guloso contra preguiçoso
Em preço [12] e [35]: \[.*\] casa [12] e [35]; \[.*?\] e \[[^\]]*\] casam [12].
- Guloso consome o máximo e recua; preguiçoso consome o mínimo e expande. Ambos partem da primeira posição viável.
- Classe negada nunca atravessa o delimitador. Nenhum dos três substitui um parser de HTML.
Contexto e custo
- Lookaround testa sem consumir:
livro(?=s)/(?!s)à frente;(?<=EUR )atrás (compatibilidade varia). - Backtracking tenta alternativas quando o resto falha.
(a+)+$com entrada quase válida pode explodir: limita o comprimento e evita repetições ambíguas em dados do cliente. - Capturas com referência já não são “regulares” no sentido de autómatos finitos.
Por motor
- JS:
testbooleano;exec/matchsemgcom capturas; comgsó correspondências;matchAllcomgpara capturas de todas. Regex comgguardalastIndex: o mesmo/a/gdátruee depoisfalseemtestrepetido. - PHP: delimitadores PCRE;
preg_matchdá 1, 0 oufalse(erro).preg_match_allextrai todas;preg_replacesubstitui com$1. - HTML:
patternsem barras, testa o valor completo; juntarequiredpara obrigar preenchimento. Servidor valida sempre de novo.