Ruby grep - 在数组中搜索字符串的一部分

kra*_*agn 6 ruby grep imap

我是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
Run Code Online (Sandbox Code Playgroud)

所以,首先我试过.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"]
Run Code Online (Sandbox Code Playgroud)

我认为问题是"INBOX"位于数组中字符串的开头,但"已发送"位于中间并且在一段时间之后.不知道如何解决.

Ash*_*her 13

尝试:

mailbox_array.grep(/Sent/)
Run Code Online (Sandbox Code Playgroud)

^表示从行的开头搜索.

  • @krapdagn:是的,虽然这也会匹配"Sentiments"和"MySentMail"之类的字符串,你可能想要也可能不想要. (2认同)

mae*_*ics 8

特殊的正​​则表达式字符^仅匹配字符串开头,因此您可能希望匹配单词边界(\b).试试这个:

mailbox_array.grep(/\bSent\b/)
Run Code Online (Sandbox Code Playgroud)