Russian Qt Forum

Qt => Общие вопросы => Тема начата: thechicho от Сентябрь 30, 2011, 16:59



Название: Аналог preg-match-all
Отправлено: thechicho от Сентябрь 30, 2011, 16:59
Подскажите как на Qt реализуется аналог php функции <a href="http://php.net/manual/ru/function.preg-match-all.php">preg_match_all();</a>

ща пока такой код:

Код:
QRegExp rx("((?:.+)=(?:.+);)");
rx.setMinimal(true);
rx.indexIn(data);
QString newdata = rx.cap(1);

а мне нужны все вхождения rx в одной строке.
т.е. как-то надо в массив спарсить все вхождения (QStringList наверн), а потом соединить массив в строку.
хелп, как это сделать.


Название: Re: Аналог preg-match-all
Отправлено: thechicho от Сентябрь 30, 2011, 17:27
Код:
QRegExp rx("([^\\s]+=(?:.+);)");
    rx.setMinimal(true);
    QString newdata;
    int pos = 0;

    while ((pos = rx.indexIn(data, pos)) != -1) {
        newdata += rx.cap(1) + " ";
        pos += rx.matchedLength();
    }

    return newdata.trimmed();

попроще можно как-то было сделать?


Название: Re: Аналог preg-match-all
Отправлено: thechicho от Сентябрь 30, 2011, 17:30
QRegExp rx("([^\\s]+=.+;)");

подшаблон тут совсем необязателен.
в общем получил я таким образом строку с куками (кука1=значение; кука2=значение; кука3=значение;).

ща мне надо отправить запрос с ней.
как?


Название: Re: Аналог preg-match-all
Отправлено: lit-uriy от Октябрь 01, 2011, 23:27
>>ща мне надо отправить запрос с ней.
>>как?

Здесь тема "Аналог preg-match-all", причём здесь запрос?


Название: Re: Аналог preg-match-all
Отправлено: thechicho от Октябрь 04, 2011, 15:37
ну, просто я сам нашел решение этой проблемы. сразу возникла следующая, вот и спросил тут. типа "живой форум", как один чувак тут грил)
с запросом тоже разобрался.

Код
C++ (Qt)
QByteArray cookieFromHeaders = reply->rawHeader("Set-Cookie");
writeOnFile(fileCookies, cookieFromHeaders);
QByteArray cookiesRead = readOnFile(fileCookies);
 
QNetworkRequest request;
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");
request.setRawHeader("Cookie", cookiesRead);
request.setUrl(QUrl(url));
 
QString PostParams = "_stateParam=eCareLocale.currentLocale%3Dru_RU__Russian&_forwardName=null&_resetBreadCrumbs=false&_expandStatus=&userName=" + loginReq + "&password=" + password + "&ecareAction=login";
QByteArray PostData = PostParams.toUtf8();
qnam->post(request, PostData);


Название: Re: Аналог preg-match-all
Отправлено: Igors от Октябрь 04, 2011, 15:56
ну, просто я сам нашел решение этой проблемы. сразу возникла следующая, вот и спросил тут. типа "живой форум", как один чувак тут грил)
с запросом тоже разобрался.
Ну наверно тот чувак был прав  :)

То что Вы энергично решаете свои проблемы - это, конечно, только хорошо. Но все имеет свои плюсы и минусы. Что будете делать если проблема оказалась совсем не простой, и просто "энергичностью" и чтением хелпа ее не решить? Никак не пытаюсь подколоть, просто интересен ход мЫшления  :)


Название: Re: Аналог preg-match-all
Отправлено: thechicho от Ноябрь 27, 2011, 18:42
while (fail) {
гугл
гугл, доки
гугл, форум
гугл, гугл, гугл
sleep(n);
}
нет нерешаемых проблем. все упирается в время на поиск решения. форум сокращает это время. вот и все.