2009-02-02 6 views
4

Comment créer un tableau d'adresses e-mail contenues dans un bloc de texte? J'ai essayéExtraire des adresses e-mail à partir d'un bloc de texte

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

mais (sans surprise), il ne fonctionne pas de manière fiable.

+0

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

+0

@Mehrdad: En désaccord. Les expressions régulières servent un seul but, mais le serveur le très bien s'il est utilisé correctement. La détection des adresses e-mail fonctionne très bien. Il suffit de le commenter. – user54650

+1

cmartin: Je n'ai rien dit! Je viens juste de me lier à un article de Jeff :) –

Répondre

9

Vousvoulez cela pour un (un peu) meilleure expression régulière

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

Vous pouvez trouver cela ici:

Email Regex

Juste un FYI, le problème avec votre e-mail est que vous autorisez uniquement un type de séparateur avant ou après une adresse e-mail. Vous devez faire correspondre "@" seul, s'il est séparé par des espaces.

+1

Il existe certains TLD de plus de 4 caractères, tels que ".museum". –

+0

De l'article: "Les exemples les plus fréquemment cités sont des adresses sur le domaine de premier niveau .museum, qui est plus long que les 4 lettres que mon regex autorise pour le domaine de premier niveau.J'accepte ce compromis car le nombre de personnes utilisant Les adresses e-mail .museum sont extrêmement faibles. " Il réduit les faux-pos. – user54650

+0

Terminer la citation expliquée ci-dessus: "Pour inclure .museum, vous pouvez utiliser^[A-Z0-9 ._% + -] + @ [A-Z0-9 .-] + \. [AZ] {2, 6} $ Cependant, il y a un autre compromis: cette expression régulière correspondra à [email protected] est beaucoup plus probable que John ait oublié de taper dans le domaine de premier niveau .com " – user54650

Questions connexes