我正在尝试扫描一组电子邮件地址并从阵列中删除特定的域名地址,然后将其返回。
这是我的代码:
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
我需要如何返回一个删除了给定元素的数组。上面的脚本只返回数组的最后一个元素作为字符串。
提前致谢。
答案 0 :(得分:1)
使用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 documentation on Arrays,并远离PHP的思维方式。
答案 1 :(得分:0)
这种模式:
/(?:@(?: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')
的方式
以下是如何使用它:
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
如果您想要 NOT 匹配的字符串:
MATCHES.reject{ |s| s[REGEX] }
# => ["noc@tristatevoicedata.com", "dpereira@affiliatedtech.com"]
如果您想要 DO 匹配的字符串:
MATCHES.select{ |s| s[REGEX] }
# => ["abuse@peterstar.net",
# "hostmaster@peterstar.net",
# "noc@peterstar.net",
# "abuse@ripe.net"]
该模式使用i
标志来强制不区分大小写,这在处理电子邮件地址时很重要,因为它们不区分大小写。