Разбор текста для идентификаторов электронной почты - PullRequest
2 голосов
/ 23 сентября 2010

Я пытаюсь разобрать текст для идентификаторов электронной почты, используя php / regex. Существуют ли какие-либо классы или встроенные методы для этого? Текст содержит несколько идентификаторов электронной почты в случайных местах.

Источник текста - файлы .doc, которые я затем копирую и вставляю в формы для обработки при отправке.

preg_match('/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email) //from php.net

Я отправил аналогичный вопрос на superuser для программных решений проблемы.

1 Ответ

3 голосов
/ 23 сентября 2010

Трудно точно обнаружить электронные письма, встроенные в бегущий текст.Вы либо сопоставите материал, который не является адресом электронной почты по ошибке, либо пропустите некоторые действительные, но странные адреса электронной почты.

Хорошей отправной точкой является

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.

...