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

Ruby grep-搜索数组中的字符串部分,ruby,grep,imap,Ruby,Grep,Imap,我是Ruby新手,对这段代码中的grep命令有点困惑。我试图通过Net::IMAP收集所有邮箱名称,然后根据邮箱参数检查它们。邮箱名称可能只包含部分参数。例如,有人可能会键入“Sent”作为邮箱,但邮箱名称很多时候会是“INBOX.Sent” 首先我试过了,有吗?但这并没有返回实际邮箱的名称。使用.grep,我可以在@mailbox=“INBOX”时获得邮箱列表。但是,当@mailbox=“Sent”时,它只返回[] 下面是一个示例,其中一个可用(使用“收件箱”),另一个不可用(使用“已发送”)

我是Ruby新手,对这段代码中的grep命令有点困惑。我试图通过Net::IMAP收集所有邮箱名称,然后根据邮箱参数检查它们。邮箱名称可能只包含部分参数。例如,有人可能会键入“Sent”作为邮箱,但邮箱名称很多时候会是“INBOX.Sent”

首先我试过了,有吗?但这并没有返回实际邮箱的名称。使用
.grep
,我可以在
@mailbox=“INBOX”
时获得邮箱列表。但是,当
@mailbox=“Sent”
时,它只返回
[]

下面是一个示例,其中一个可用(使用“收件箱”),另一个不可用(使用“已发送”):


我认为问题是“收件箱”是数组中的字符串的开始,但是“发送”是在中间,是在一段时间之后。不确定如何修复。

特殊正则表达式字符
^
只匹配字符串的开头,因此您可能需要匹配单词边界(
\b
)。试试这个:

mailbox\u array.grep(/\bSent\b/)
试试:


^表示从行首开始搜索。

Woohoo!我需要进一步研究这些正则表达式:)。非常感谢。好的,还有一个问题,对不起。例如,当mailbox=“Sent Messages”时,它返回[]。我认为这是因为双引号。如何操作邮箱,使其适合grep(/mailbox/)而周围没有“”吗?啊-找到了:值得注意的是,ruby中的
^
将匹配任何行的开头<代码>\A将匹配输入的绝对开始。(与
$
/
\Z
相同)@krapdagn:是的,不过这也会匹配字符串,如“感伤”和“mycentmail”,您可能需要也可能不需要。
   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
#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"]
mailbox_array.grep(/Sent/)