2009-09-15 45 views
1

我希望可能有一個簡單的方法來做到這一點,我假設正則表達式。 java中將以下字符串拆分爲電子郵件地址的最佳方法是什麼?用於拆分電子郵件地址的正則表達式(Java)

[email protected], "Jane" <[email protected]>, "Smith, Mr" <[email protected]> 

逗號可以出現在雙引號內的事實使得它更難一些。我想理想情況下它也可以用單引號工作?

[email protected], 'Jane, Ms' <[email protected]>, "Smith, Mr" <[email protected]> 

我認爲這將是很好的檢查是否有一個更簡單的方法保存必須編寫完整的解析器!

回答

5

大部分將被處理:

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

雖然全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])+)\]) 

無論從regular-expressions.info,有討論地方達不到的 「完美」。

在Java中,只需不斷重複即可找到沒有名稱的電子郵件地址。

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

從查德威克的鏈接,一個正則表達式正確的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

難道它不可愛嗎?:) – serg 2009-09-15 22:28:08

+1

它對我說「正則表達式不是一個很好的解決每個問題的方法」。 – 2009-09-16 00:00:50

相關問題