Регулярное выражение для поиска email-адресов в тексте

Используйте /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g, чтобы найти все совпадения в тексте. Каждый пример ниже проверен на этом шаблоне, и его можно открыть в Regex Tester с уже загруженными образцами.

Обновлено

/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g
Открыть в Regex Tester

Пример текста

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

3 совпадения

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

Как работает шаблон

ЧастьЗначение
[A-Za-z0-9._%+-]+Локальная часть
@Знак @
[A-Za-z0-9.-]+\.[A-Za-z]{2,}Домен и домен верхнего уровня
g flagНайти все совпадения, а не только первое

Примеры кода

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];

Примечания и ограничения

Без якорей ^ и $ шаблон находит адреса в любом месте текста. Вставьте весь документ в Regex Tester, чтобы получить список всех совпадений.

Часто задаваемые вопросы

Какое регулярное выражение находит все email-адреса в тексте?
/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g — оно находит все совпадения в тексте. Что делает каждая часть, описано в таблице выше.
Работает ли это в Python и PHP?
Да — примеры кода выше используют тот же шаблон: в Python через re, в PHP через функции preg.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и образец текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.