Tôi mới dùng Ruby và một chút nhầm lẫn với lệnh grep trong khối mã này. Tôi đang cố gắng thu thập tất cả các tên hộp thư thông qua Net :: IMAP và sau đó kiểm tra chúng chống lại một đối số hộp thư. Có khả năng tên hộp thư sẽ chỉ bao gồm một phần của đối số. Ví dụ: ai đó có thể nhập "Đã gửi" làm hộp thư nhưng nhiều lần tên hộp thư sẽ là "INBOX.Sent".Ruby grep - tìm kiếm một mảng cho các phần của chuỗi
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
Vì vậy, trước tiên tôi đã thử .any? nhưng điều đó không trả lại cho tôi tên của hộp thư thực. Với .grep
, tôi có thể nhận danh sách các hộp thư khi @mailbox = "INBOX"
. Tuy nhiên, khi @mailbox = "Sent"
nó chỉ trả lại []
.
Dưới đây là một ví dụ về một trong những hoạt (sử dụng "INBOX") và một trong đó không thực hiện (sử dụng "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"]
Tôi nghĩ vấn đề là "INBOX" là ở bắt đầu của các chuỗi trong mảng, nhưng "Đã gửi" ở giữa và sau một khoảng thời gian. Không chắc chắn cách khắc phục.
Hmm cũng hoạt động. Tôi đoán \ b là không cần thiết. – krapdagn
@krapdagn: yup, mặc dù điều này cũng sẽ khớp với các chuỗi như "Tình cảm" và "MySentMail", mà bạn có thể hoặc không muốn. – maerics