我正在尝试扫描电子邮件地址数组,并从数组中删除特定的域地址,然后返回它。
这是我的代码:
matches = ["abuse@peterstar.net", "hostmaster@peterstar.net", "noc@peterstar.net", "noc@tristatevoicedata.com", "abuse@ripe.net", "dpereira@affiliatedtech.com"]
email = Array.new()
emails = Array.new()
matches.each do |email|
if email != 'nobody@peterstar.com' && !email.match('@peterstar.net') && !email.match('@ripe.net') && !email.match('@arin.net') && !email.match('@lacnic.net') && !email.match('@afrinic.net')
emails = email
puts emails
end
end
puts emails
这是脚本的输出:
dpereira@affiliatedtech.com
我需要知道如何返回已删除给定元素的数组。上面的脚本仅将数组的最后一个元素作为字符串返回。
提前谢谢。
使用Regexp
:
re = /(^nobody@peterstar.com|@peterstar.net|@ripe.net|@arin.net|@lacnic.net|@afrinic.net)/
matches.select {| email | email !~ re }
# => ["noc@tristatevoicedata.com", "dpereira@affiliatedtech.com"]
使用电子邮件数组和电子邮件模板:
res = [
'nobody@peterstar.com',
/@peterstar.net/,
/@ripe.net/,
/@arin.net/,
/@lacnic.net/,
/@afrinic.net/, ]
emails = matches.reject {| email | res.any? {| re | re === email } }
# => ["noc@tristatevoicedata.com", "dpereira@affiliatedtech.com"]
emails.last
# => "dpereira@affiliatedtech.com"
或者使用卷积或约简:
res = [
'nobody@peterstar.com',
/@peterstar.net/,
/@ripe.net/,
/@arin.net/,
/@lacnic.net/,
/@afrinic.net/, ]
matches.reduce(nil) {| email, match | !res.any? {| re | re === match } && match || email }
# => "dpereira@affiliatedtech.com"
还请参考ruby关于数组的文档,远离PHP的思维方式。
这种模式:
/(?:@(?:a(?:frinic|rin)|peterstar|lacnic|ripe)\.net|nobody@peterstar\.com)/i
与您的列表相匹配:
if email != 'nobody@peterstar.com' && !email.match('@peterstar.net') && !email.match('@ripe.net') && !email.match('@arin.net') && !email.match('@lacnic.net') && !email.match('@afrinic.net')
下面是Rubular如何显示它的。
下面是如何使用它:
MATCHES = %w[
abuse@peterstar.net
hostmaster@peterstar.net
noc@peterstar.net
noc@tristatevoicedata.com
abuse@ripe.net
dpereira@affiliatedtech.com
]
REGEX = /(?:@(?:a(?:frinic|rin)|peterstar|lacnic|ripe)\.net|nobody@peterstar\.com)/i
如果需要不匹配的字符串:
MATCHES.reject{ |s| s[REGEX] }
# => ["noc@tristatevoicedata.com", "dpereira@affiliatedtech.com"]
如果需要匹配的字符串:
MATCHES.select{ |s| s[REGEX] }
# => ["abuse@peterstar.net",
# "hostmaster@peterstar.net",
# "noc@peterstar.net",
# "abuse@ripe.net"]
该模式使用i
标志强制区分大小写,这在处理电子邮件地址时很重要,因为它们不区分大小写。