user1358886
user1358886

Reputation:

How to search through array with Regex?

So I am trying to match email to email domains (ie bob@test to @test.com). Both the array of emails and email domains are in separate arrays. Right now I am trying the following:

@Domains.each do |domain|
    if @Emails.include?(/.*/ + domain) then 
        #do stuff
    end
end

That is obviously throwing errors and I cannot find another solution. Any ideas?

Upvotes: 0

Views: 127

Answers (3)

Bala
Bala

Reputation: 11274

@domains = ["hotmail.com", "gmail.com"]
@emails = ["[email protected]", "[email protected]", "[email protected]"]
@a = []

@domains.each {|d|
  @a << @emails.select{ |e| e=~ /#{d}/ }
}

@a.flatten! #=> ["[email protected]", "[email protected]"]

Now I can do stuff with @a

Upvotes: 0

Matheus Moreira
Matheus Moreira

Reputation: 17030

You can use each_with_object with a hash, grep the @emails array for matching patterns and associate both:

@domains.each_with_object Hash.new do |domain, matches|
  matches[domain] = @emails.grep domain
end

Upvotes: 0

sawa
sawa

Reputation: 168269

It is not clear what you are trying to do with a regex. This is a minimum fix to make it run. It does not use a regex.

@Domains.each do |domain|
  if @Emails.any?{|email| email.end_with?(domain)} 
    #do stuff
  end
end

Upvotes: 2

Related Questions