Описание ваших требований действительно расплывчато. Но методы partition
или select
подойдут вам:
words = %w(aaa aab acc ccc AAA)
re = %r(aa.)i
p words.partition {|word| word.match(re)} # => [["aaa", "aab", "AAA"], ["acc", "ccc"]]
p words.select {|word| word.match(re)} # => ["aaa", "aab", "AAA"]
UPDATE
Основано на вашем последнем комментарии:
stops= %q(aa* ac* ab*)
stops.split.collect do |wildcard|
re = Regexp.new(wildcard, Regexp::IGNORECASE)
words.select {|word| word.match(re)}
end
# => [["aaa", "aab", "acc", "AAA"], ["aaa", "aab", "acc", "AAA"], ["aaa", "aab", "acc", "AAA"]]
Если эти результаты вас удивят, вы, возможно, захотите узнать больше о регулярных выражениях, которые сильно отличаются и более эффективны, чем шаблоны в стиле glob. Ruby не выполняет глобальное сопоставление строк.