简单 - 使用字符串#扫描,提取电子邮件地址
我有一个包含字符串:简单 - 使用字符串#扫描,提取电子邮件地址
@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
正则表达式/的定义之间,所以如果你把里面的字符串引用红宝石不会使它一个正则表达式,而是会只认准纯文本。 –