2009-09-15 2 views
1

J'espère qu'il y aura un moyen facile de le faire, je suppose des expressions régulières. Quel est le meilleur moyen de java de diviser la chaîne suivante en adresses e-mail? Le fait qu'une virgule puisse apparaître dans les doubles guillemets le rend un peu plus difficile. Je suppose que cela fonctionnerait idéalement avec des guillemets simples? Je pensais qu'il serait bon de vérifier s'il y a un moyen plus simple d'écrire un analyseur complet!Expression régulière pour le fractionnement des adresses e-mail (en Java)

Répondre

5

La plupart seront traitées par:

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

Bien que pour une utilisation complète de la conformité RFC-2822:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 

deux de regular-expressions.info, avec une discussion sur l'endroit où il est loin de "parfait".

En Java, continuez à répéter pour trouver uniquement les adresses e-mail sans les noms.

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

public class Main { 
    public static void main(String[] args) { 
     new Main().findEmails("[email protected], \"Jane\" <[email protected]>, \"Smith, Mr\" <[email protected]>"); 
    } 
    public void findEmails(String s) { 
     System.out.println("ready: "+s); 
     Pattern p = Pattern.compile("\\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}\\b", 
            Pattern.CASE_INSENSITIVE); 
     Matcher m = p.matcher(s); 
     while (m.find()) 
      System.out.println("Found: "+m.group()); 
    } 
} 
2

Du lien de Chadwick, un regex correct pour RFC2822:

(?:[a-z0-9!#$%&'*+/=?^_ {|} ~ -] + (: [a-z0-9 # $% & « * +/=.!?^_ {|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

+0

N'est-ce pas mignon? :) – serg

+1

Il me dit "regexs ne sont pas une bonne solution à tous les problèmes". –

Questions connexes