我有一個包含字符串:簡單 - 使用字符串#掃描,提取電子郵件地址
@from = "John Doe <[email protected]>"
當我這樣做:
@from.scan('/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i')
我沒有得到任何結果。我試圖自行提取電子郵件地址。
我試圖消除\ B的,但這也不能工作。
任何幫助將不勝感激。
我有一個包含字符串:簡單 - 使用字符串#掃描,提取電子郵件地址
@from = "John Doe <[email protected]>"
當我這樣做:
@from.scan('/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i')
我沒有得到任何結果。我試圖自行提取電子郵件地址。
我試圖消除\ B的,但這也不能工作。
任何幫助將不勝感激。
你表達正常工作:rubular
的問題是在你的正則表達式的報價意味着它被解釋爲純文本字符串,而不是一個正則表達式。刪除引號解決了這個問題:ideone
@from = "John Doe <[email protected]>"
@from.scan(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i) { |x| puts x }
輸出:
[email protected]
對不起,我沒有足夠的代表處發表評論,所以我會做這樣一個答案:
對於任何將來的使用,每個人都應該做一個修改:不要限制TLD長度4.新頂級域名正在推出非常迅速,現在您應該使用這樣的正則表達式:
@from.scan(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}\b/i)
我所做的只是去掉4
在正則表達式,這使在TLD的4個字符的最大長度結束。 TLD幾乎都是2,3或4個字符(.com,.org,.info等)。但現在,他們正在推出大量的新產品(.auction,.software,.business等)。
所以沒有人應該限制TLD的長度了(儘管留下最少2個字符仍然很好)。
對於那些誰只需要對付像地址"John Doe <[email protected]>"
,其中可能包含的顯示名稱。
使用Ruby的Mail::Address
類。
require 'mail'
#=> true
a = Mail::Address.new("John Doe <[email protected]>")
#=> #<Mail::Address:70264542184500 Address: |John Doe <[email protected]>| >
a.address
#=> "[email protected]"
a.display_name
#=> "John Doe"
我最近一直在使用它,但是偶然發現了一個UTF8字符似乎不受支持的bug:https://github.com/mikel/mail/issues/1014 ... – Nick
正則表達式/的定義之間,所以如果你把裏面的字符串引用紅寶石不會使它一個正則表達式,而是會只認準純文本。 –