Здравствуйте!Пишу на Qt простенький почтовый клиент для работы с IMAP. Как работать с протоколом я знаю, вручную через консоль все понятно и просто. Проблема в работе с этим программно. Вернее просблема с парсингом ответов сервера, чтобы программа понимала что пришло в ответе.
Мне приходит два направления в решении этой задачи:
1) Вручную разбирать строки - но это не удобно, громоздко, да и вообще геморно писать
2) Регулярные выражения - вроде бы как удобно, но не понятно. Просто так получилось, что это меня как то стороной обошло и не понятно мне как с ними работать.Вот например при соединении с сервером приходит ответ "* OK Gimap ready for requests from 95.26.60.65 b13if11336977bkb.34" ("* OK <имя сервера> ready for requests from <ip> <хрень какая-то>"). Попробовал для этого составить регексп - /^\\* OK \\w+? ready for requests from .*$/ Но он не работает.
Может есть у кого масли как осуществить парсинг ответов сервера в подобных протоколах или напишите пример регулярного выражения для этого, если не сложно.
Вообщем кто имел опыт в подобного рода проблемах помогайте пожалуйста!)))
Всем спасибо взаранее!
> "* OK Gimap ready for requests from 95.26.60.65 b13if11336977bkb.34"
> "* OK <имя сервера> ready for requests from <ip> <хрень какая-то>"
> Попробовал для этого составить регексп
> /^\\* OK \\w+? ready for requests from .*$/ Но он не работает.Имея в виду перловые регекспы, можно написать так:
/^\* OK (\S+) ready for requests from (\S+) (.*)$/Тут будет: $1 - имя сервера, $2 - ip, $3 - "хрень какая-то". Анализом правильности полей здесь не заморачиваюсь.
Кстати, а нет ли готовых библиотек для работы с imap, чтобы не изобретать велосипед? Для perl'а видел, за остальных не скажу.
Спасибо большое!) С самими регулярными выражениями вроде бы вник в суть. Но проблема теперь с Qt. Код следующий:regExp.setPattern("/^\\* OK (\\S+) ready for requests from (\\S+) (.*)$/");
validator.setRegExp(regExp);
pos = 0;if(validator.validate(msg, pos) == QValidator::Acceptable)
{
_state = not_authenticated;
ui->statusBar->showMessage(QString("Соединение с %1 установлено.").arg(_hostName));
}Проверил на всякий случай правильно ли составлено выражение на http://regexpr.ru/
Составлено правильно. Но при запуске программы он не попадает в if, условие не выполняется.
Пробовал в проверке писать QValidator::Intermediate - то же не выполняется, хотя по идеи должен QValidator::Acceptable выполняться. Посмотрел в справке пвроде все так же...
Все.. Вообщем я понял, оказывается в кути не надо ставить "/" в начале и в конце, без них все заработало.
http://qt-apps.org/CONTENT/content-files/79791-rep.zip спосебо этой программе, в ней только заметил)Вообщем если у кого похожие проблемы убирайте "/"