Wyrażenia regularne - wybieranie tekstu spomiędzy znaczników html.

0

Napisałem sobie funkcję znajdującą wszystkie wystąpienia pewnego tekstu.
Użyłem do tego wyrażenia regularnego:

 <span class=\"st\">pierwsze(.*?)</span>

To wyrażenie dobrze mi się sprawdzało, gdy wykorzystywałem bibliotekę <regex>, lecz postanowiłem przepisać funkcję wykorzystując bibliotekę <QRegExp> i tu zaczął się problem, mianowicie funkcja nie znajduje mi nic.

     QString str = "<span class=\"st\">pierwsze wystąpienie</span><span class=\"st\">Drugie wystąpnieie</span><span class=\"st\">Trzecie wystąpnienie</span><span class=\"st\">pierwsze wyświetlenie</span>";
    QString regGenre("<span class=\"st\">pierwsze(.*?)</span>");

    QRegExp rx(regGenre);
    int pos =0;

    while ((pos = rx.indexIn(str, pos)) != -1) {
        qDebug()<<rx.cap(0);
        pos += rx.matchedLength();
    }

Jak powinien wyglądać ten zapis: (.*?), żeby qregexp dobrze to czytał?

2

Spróbuj (.*)?.
Natomiast, pls, generalnie nie wykorzystuj regexów do przetwarzania htmla :-P

0

Działa, dzięki.
Trzeba jeszcze tylko dodać jedną linijkę rx.setMinimal(true);, bo bez tego też nie pójdzie:

      QString str = "<span class=\"st\">pierwsze wystąpienie</span><span class=\"st\">Drugie wystąpnieie</span><span class=\"st\">Trzecie wystąpnienie</span><span class=\"st\">pierwsze wyświetlenie</span>";
    QString regGenre("<span class=\"st\">pierwsze(.*?)</span>");
 
    QRegExp rx(regGenre);
    int pos =0;
    rx.setMinimal(true);
    while ((pos = rx.indexIn(str, pos)) != -1) {
        qDebug()<<rx.cap(0);
        pos += rx.matchedLength();
    }

Swoją drogą bez sensu, że brak kompatybilności między bibliotekami <regex> i <qregexp>.

Patryk27 napisał(a):

Natomiast, pls, generalnie nie wykorzystuj regexów do przetwarzania htmla :-P

Mam w html zapisane pewne dane, które chcę wyciągnąć. Jeśli nie regex, to co?

0

Zależy konkretnie co i z czego chcesz wyciągnąć - natomiast jeśli do gry wchodzi parsowanie HTMLa/XMLa, najprawdopodobniej powinieneś wykorzystać jakiś silnik robiący właśnie to: parsowanie HTMLa.

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