2009-02-02 3 views
4

Как создать массив адресов электронной почты, содержащийся в блоке текста? Я попыталсяИзвлечь адреса электронной почты из блока текста

addrs = text.scan(/ [email protected]+? /).map{|e| e[1...-1]}

но (не удивительно) не работает надежно.

+0

http://www.codinghorror.com/blog/archives/000214.html –

+0

@Mehrdad: Не согласен. Регулярные выражения используют одну цель, но сервер очень хорошо используется при правильном использовании. Обнаружение адресов электронной почты работает нормально. Просто прокомментируйте это. – user54650

+1

cmartin: Я ничего не сказал! Я только что связался со связанным сообщением от Джеффа :) –

ответ

9

Howabout это для (чуть-чуть) лучше регулярного выражения

\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b 

Вы можете найти это здесь:

Email Regex

Просто FYI, проблема с электронной почтой является то, что вы позволяете только один тип разделителя до или после адреса электронной почты. Вы будете соответствовать только «@», если они разделены пробелами.

+1

Существует несколько TLD длиной более 4 символов, например «музей». –

+0

Из статьи: «Наиболее часто цитируемый пример - это адреса домена верхнего уровня .museum, который длиннее четырех букв, которые мое регулярное выражение позволяет домену верхнего уровня. Я принимаю этот компромисс, потому что число людей, использующих .museum очень низкий " Уменьшает false-pos. – user54650

+0

Завершение приведенной выше цитаты: «Чтобы включить музей, вы можете использовать^[A-Z0-9 ._% + -] + @ [A-Z0-9 .-] + \. [AZ] {2, 6} $, но тогда есть еще один компромисс: это регулярное выражение будет соответствовать [email protected] Гораздо более вероятно, что Джон забыл ввести домен верхнего уровня .com « – user54650

Смежные вопросы