Трудно точно обнаружить электронные письма, встроенные в бегущий текст.Вы либо сопоставите материал, который не является адресом электронной почты по ошибке, либо пропустите некоторые действительные, но странные адреса электронной почты.
Хорошей отправной точкой является
preg_match_all('/\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b/i', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
# Matched text = $result[0][$i];
}
(созданный RegexBuddy из своей библиотеки)
Он будет соответствовать большинству "обычных" адресов, но не найдет таких, как mail@1.2.3.4
или "Tim\ O'Reilly"@microsoft.com
.И, конечно, это будет соответствовать ерунде, как my@mail.addr
.