Ruby grep - recherche dans un tableau pour une partie de la chaîne
Je suis nouveau sur le Rubis et un peu confus par la commande grep dans ce bloc de code. Je suis en train de rassembler tous les noms de boîtes aux lettres via le Net::IMAP, puis de les comparer à celles d'une boîte aux lettres argument. Probablement le nom de boîte aux lettres sera seulement une partie de l'argument. Par exemple, quelqu'un peut-type dans "Envoyé", comme la boîte aux lettres, mais de nombreuses fois le nom de boîte aux lettres sera "de la BOÎTE de réception.Envoyé."
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
Donc, j'ai d'abord essayé .tout? mais cela ne veut pas me rendre le nom de la boîte aux lettres réelle. Avec .grep
, je suis en mesure d'obtenir une liste des boîtes aux lettres quand @mailbox = "INBOX"
. Toutefois, lorsque @mailbox = "Sent"
elle retourne []
.
Voici un exemple de quelqu'un qui travaille (à l'aide de la "BOÎTE de réception") et celui qui n'a pas (à l'aide d'un "Envoyé"):
#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"]
Je pense que le problème est que la "BOÎTE de réception" est au début des chaînes dans le tableau, mais "Envoyé" est dans le milieu et est issue d'une période. Vous ne savez pas comment résoudre.
Vous devez vous connecter pour publier un commentaire.
Essayer:
L' ^ moyens de recherche à partir du début de la ligne.
Spécial regex caractère
^
ne correspond qu'à la début de la chaîne alors peut-être que vous voulez faire correspondre à une limite de mot (\b
) à la place. Essayez ceci:^
en ruby va correspondre au début de tout ligne.\A
correspondra le commencement absolu de l'entrée. (Même avec$
/\Z
.)