Regex para encontrar todos os e-mails em texto

Use /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g para encontrar todas as ocorrências em um texto. Cada exemplo abaixo foi testado contra o padrão, e você pode abri-lo no Testador de Regex com os textos de exemplo já carregados.

Atualizado em

/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g
Abrir no Testador de Regex

Texto de exemplo

Contact sales@example.com or support@devpack.app. Jane (jane.doe+news@mail.example.co.uk) replied; ignore @handles and user@localhost.

3 ocorrências

sales@example.com support@devpack.app jane.doe+news@mail.example.co.uk

Como o padrão funciona

ParteSignificado
[A-Za-z0-9._%+-]+A parte local
@O sinal @
[A-Za-z0-9.-]+\.[A-Za-z]{2,}O domínio e o domínio de topo (TLD)
g flagEncontra todas as ocorrências, não só a primeira

Exemplos de código

JavaScript

const matches = text.match(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g) ?? [];

Python

import re

matches = re.findall(r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}', text)

PHP

preg_match_all('/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/', $text, $m);
$matches = $m[0];

Observações e limitações

Sem as âncoras ^ e $, o padrão encontra endereços em qualquer ponto de um texto. Cole um documento inteiro no Testador de Regex para listar todas as ocorrências.

Perguntas frequentes

Qual é a regex para encontrar todos os e-mails em um texto?
/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g — ela encontra todas as ocorrências em um texto. Veja a tabela acima para entender o que cada parte faz.
Funciona em Python e PHP?
Sim — os exemplos de código acima usam o mesmo padrão, com re em Python e as funções preg em PHP.
Como eu testo essa regex?
Clique em “Abrir no Testador de Regex” — o padrão, as flags e o texto de exemplo são carregados automaticamente, e as ocorrências são destacadas conforme você edita.