Ruby grep - поиск в массиве частей строки - PullRequest
6 голосов
/ 28 февраля 2012

Я новичок в Ruby и немного смущен командой grep в этом блоке кода. Я пытаюсь собрать все имена почтовых ящиков через Net :: IMAP, а затем проверить их по аргументу почтового ящика. Скорее всего, имя почтового ящика будет включать только часть аргумента. Например, кто-то может ввести «Отправлено» в качестве почтового ящика, но много раз имя почтового ящика будет «INBOX.Sent».

   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

Итак, сначала я попробовал. но это не возвращает мне имя фактического почтового ящика. С .grep я могу получить список почтовых ящиков, когда @mailbox = "INBOX". Однако, когда @mailbox = "Sent", он просто возвращает [].

Вот пример того, кто работает (используя «INBOX»), и того, который не работает (используя «Sent»):

#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» находится в начале строк в массиве, а «Sent» находится в середине и после периода. Не уверен, как исправить.

Ответы [ 2 ]

13 голосов
/ 28 февраля 2012

Попробуйте:

mailbox_array.grep(/Sent/)

^ означает поиск с начала строки.

7 голосов
/ 28 февраля 2012

Специальный символ регулярного выражения ^ соответствует только началу строки , поэтому, возможно, вы захотите сопоставить границу слова (\b).Попробуйте это:

mailbox_array.grep(/\bSent\b/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...