[Qt][c++] wyrażenie regularne - pobieta tylko ostatnią wartość

0

mam proste wyrażenie regularne:

QRegExp reg("(.*)<h1 class=\"demot\">(.*)</h1>(.*)");

następnie pobieram stronę www, którą chcę przeszukać

QString result = Http->readAll();

no i teraz chce uzyskać listę wszystkich wyników, które pasują do tego wyrażenia. Napisałem to tak:

reg.indexIn(result);
    qDebug()<<reg.cap(2);

i wtedy dostaję wynik, ale tylko jeden i to w dodatku ostatni. Jak to mam inaczej ugryźć, by było to dobrze?

0

próbowałem korzystać również z tej strony, ale dalej lipa...

    QRegExp reg("\\s*<h1 class=\"demot\">[a-zA-Z1-9]+</h1>\\n");
    QString result = Http->readAll();

    int pos = 0;

    while ((pos = reg.indexIn(result, pos)) != -1) {
         qDebug()<<result.mid(pos, pos + reg.matchedLength());
         pos += reg.matchedLength();
     }
0

I co w tym kodzie Ci nie gra? W tym drugim oczywiście. Bo w pierwszym napisałeś, że zwraca tylko ostatnią znalezioną wartość, a teraz?

0

Za bardzo kombinujesz z tym wyrażeniem regularnym.

QRegExp reg("<h1\\s+class\\s*=\\s*\"demot\"\\s*>\\s*([\\w\\d]+)\\s*</h1>");
QString result = Http->readAll();
int pos = 0;
while ((pos = reg.indexIn(result, pos)) != -1) {
    qDebug() << reg.cap(0);
    pos += reg.matchedLength();
}
0

Jak pisałem różne wyrażenia regularne to do szybkich testów używałem
http://regexpal.com/
to też powinno być dobre
http://gskinner.com/RegExr/
zrobisz szybkie testy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1