Ruby grep - Suche in einem array für Teile einer Zeichenkette
Ich bin neu mit Ruby und ein bisschen verwirrt durch den grep-Befehl in diesem code-block. Ich werde versuchen, zu sammeln all die mailbox-Namen via Net::IMAP und dann überprüfen Sie Sie gegen eine mailbox-argument. Wahrscheinlich der name der mailbox wird nur ein Teil der Argumentation. Zum Beispiel, jemand kann geben Sie in "Gesendet", wie das Postfach, sondern viele Male den Namen des Postfachs "POSTEINGANG".Gesendet."
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
So, zuerst habe ich versucht .? aber das zurück nicht Sie mir den Namen des aktuellen Postfachs. Mit .grep
bin ich in der Lage, um eine Liste der Postfächer, wenn @mailbox = "INBOX"
. Allerdings, wenn @mailbox = "Sent"
es gibt einfach zurück []
.
Hier ist ein Beispiel für eine, die funktioniert (mit "POSTEINGANG") und eine, die nicht (mit "Gesendet"):
#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"]
Ich denke, das problem ist, dass "POSTEINGANG" ist am Anfang des strings in das array, aber "Geschickt" ist in der Mitte und ist nach einer Zeit. Nicht sicher, wie Sie Sie zu beheben.
InformationsquelleAutor krapdagn | 2012-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
^ Bedeutet die Suche nach den Anfang der Zeile.
yup, obwohl das würde auch passen, Zeichenfolgen wie "Gefühle" und "MySentMail", was Sie können oder nicht wollen.
InformationsquelleAutor Asher
Die spezielle regex-Zeichen
^
entspricht nur der Anfang der Zeichenfolge so möchten Sie vielleicht, um einen Wort-Grenze (\b
) statt. Versuchen Sie dies:OK - noch eine Frage, sorry. Wenn Postfach = "Gesendete Nachrichten" zum Beispiel es gibt []. Ich denke, dies ist wegen der Anführungszeichen. Wie zu manipulieren, Postfach, so dass es passt in der grep(/Postfach/) ohne "" um ihn herum?
Ah - es herausgefunden: grep(/#{@Postfach}/)
Erwähnenswert ist, dass
^
in ruby wird mit dem Anfang von Linie.\A
werden mit den absoluten Anfang der Eingabe. (Gleiche mit$
/\Z
.)InformationsquelleAutor maerics