Я новичок в Ruby и немного смущен командой grep в этом блоке кода. Я пытаюсь собрать все имена почтовых ящиков через Net :: IMAP, а затем проверить их на аргумент почтового ящика. Вероятно, имя почтового ящика будет включать только часть аргумента. Например, кто-то может ввести «Отправлено» в качестве почтового ящика, но много раз имя почтового ящика будет «INBOX.Sent».Ruby grep - поиск массива для частей строки
class ExamineMail
def initialize(user, domain, pass, box)
@username = user
@domain = domain
@pass = pass
@mailbox = box
end
def login()
@imap = Net::IMAP.new("mail." + @domain)
@imap.authenticate('LOGIN', @username + "@" + @domain, @pass)
mailbox_array = @imap.list('','*').collect{ |mailbox| mailbox.name }
#mailbox_array.any? { |w| @mailbox =~ /#{w}/ }
mailbox_array.grep(/^@mailbox/)
end
end
Итак, сначала я пробовал .any? но это не возвращает мне имя фактического почтового ящика. С .grep
я могу получить список почтовых ящиков, когда @mailbox = "INBOX"
. Однако, когда @mailbox = "Sent"
он просто возвращает []
.
Вот пример одного, который работает (с использованием «INBOX») и тот, который не делает (с использованием «Отправленные»):
#Get the list of inboxes
mailbox_array = imap.list('','*').collect{ |mailbox| mailbox.name }
=> ["INBOX", "INBOX.Trash", "INBOX.Sent", "INBOX.Sent Messages", "INBOX.Junk", "INBOX.Drafts", "INBOX.Deleted Messages", "INBOX.Apple Mail To Do"]
#Search for mailboxes including "Sent"
>> mailbox_array.grep(/^Sent/)
=> []
#Search for "INBOX"
>> mailbox_array.grep(/^INBOX/)
=> ["INBOX", "INBOX.Trash", "INBOX.Sent", "INBOX.Sent Messages", "INBOX.Junk", "INBOX.Drafts", "INBOX.Deleted Messages", "INBOX.Apple Mail To Do"]
Я думаю, что проблема в том, что «INBOX» находится на начало строк в массиве, но «Отправлено» находится посередине и находится после периода. Не знаете, как исправить.
Хм это тоже работает. Я предполагаю, что \ b не нужен. – krapdagn
@krapdagn: yup, хотя это также соответствовало бы строкам типа «Sentiments» и «MySentMail», которые вы можете или не захотите. – maerics