Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
poss
Заблокирован
1

Регулярное выражение. Вытащить текст между дивами

15.08.2014, 07:29. Просмотров 772. Ответов 10
Метки нет (Все метки)

HTML5
1
<div class="labeled name"><a href="/naumv" onclick="return nav.go(this, event);">Владислав Foips</a></div>
Как вытащить отсюда "Владислав Foips", при этом явно указав слева всю строку "<div class="labeled name"><a href="/naumv" onclick="return nav.go(this, event);">" и справа строку </div> ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 07:29
Ответы с готовыми решениями:

Регулярное выражение Qt
Надо пропарсить страницу, на наличие номеров телефонов факсов, т.е. есть строки...

Регулярное выражение
Ребята, подскажите, можно ли как нибудь &quot;быстро&quot; проверить занесенное в...

Составить регулярное выражение
Есть некое выражение: ---word.txt--- Как проверить существует ли в тексте это...

Регулярное выражение IP адреса
Может кто-нить подсказать, как с помощью регулярных выражений можно обспечаить...

Регулярное выражение QRegExp
Помогите составить регулярное выражение для демо-примера в Qt4 &quot;Custom Sort...

10
Dmitriy_M
1428 / 1308 / 131
Регистрация: 20.03.2009
Сообщений: 4,677
Записей в блоге: 11
15.08.2014, 10:19 2
Никто не парсит HTML регулярками.
1
Avazart
Эксперт С++
7723 / 5632 / 549
Регистрация: 10.12.2010
Сообщений: 25,402
Записей в блоге: 17
15.08.2014, 13:02 3
Я парсю...

А смысл, чет другое юзать для того что бы только вытащить пару слов?
1
Dmitriy_M
1428 / 1308 / 131
Регистрация: 20.03.2009
Сообщений: 4,677
Записей в блоге: 11
15.08.2014, 14:06 4
Часть граблей с парсингом можно посмотреть в Что не нужно кодить самостоятельно
1
poss
Заблокирован
15.08.2014, 16:31  [ТС] 5
и все же, как вытащить текст из html между слева id=" и справа ", в данном коде где то ошибка?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
   QString htmltext = ui->webView->page()->currentFrame()->toPlainText();
 
        QRegExp rx("/(?<=id\=\")[a-zA-Z0-9\D]+(?=\")/");
        QStringList list;
        int pos = 0;
 
        while ((pos = rx.indexIn(htmltext, pos)) != -1) {
            list << rx.cap(1);
            pos += rx.matchedLength();
        }
        qDebug() << list;
0
RazrFalcon
1386 / 1243 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.08.2014, 16:33 6
Лучший ответ Сообщение было отмечено poss как решение

Решение

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
    QString str = QString::fromUtf8("<div class=\"labeled name\"><a href=\"/naumv\" onclick=\"return "
                                    "nav.go(this, event);\">Владислав Foips</a></div");
    QXmlStreamReader stream(str);
    while (!stream.atEnd() && !stream.hasError()) {
        stream.readNext();
        if (stream.tokenType() == QXmlStreamReader::StartElement) {
            if (stream.name() == "a" && stream.attributes().value("href").toString() == "/naumv") {
                stream.readNext();
                qDebug() << stream.text();
                break;
            }
        }
    }
или
C++ (Qt)
1
2
3
4
5
6
7
8
9
    QDomDocument doc;
    doc.setContent(str);
    QDomNodeList list = doc.elementsByTagName("a");
    for (int i = 0; i < list.size(); ++i) {
        if (list.at(i).toElement().attribute("href") == "/naumv") {
            qDebug() << list.at(i).toElement().text();
            break;
        }
    }
Можно и регуляркой, но ненадежно.
1
poss
Заблокирован
15.08.2014, 16:50  [ТС] 7
я не знал, что в qt есть библиотека для парсинга html, это с регулярными выражениями у меня с php осталось.

чего то я не понимаю ошибка, именно с получение данных из ui->WebView.
так ничего не выводит qDebug
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    QString str = ui->webView->page()->currentFrame()->toHtml();
        //QString str = QString::fromUtf8("<div class=\"labeled name\"><a href=\"/naumv\" onclick=\"return "
          //                                  "nav.go(this, event);\">Владислав Foips</a></div");
            QXmlStreamReader stream(str);
            while (!stream.atEnd() && !stream.hasError()) {
                stream.readNext();
                if (stream.tokenType() == QXmlStreamReader::StartElement) {
                    if (stream.name() == "a" && stream.attributes().value("href").toString() == "/naumv") {
                        stream.readNext();
                        qDebug() << stream.text();
                        break;
                    }
                }
            }
так
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  //QString str = ui->webView->page()->currentFrame()->toHtml();
        QString str = QString::fromUtf8("<div class=\"labeled name\"><a href=\"/naumv\" onclick=\"return "
                                           "nav.go(this, event);\">Владислав Foips</a></div");
            QXmlStreamReader stream(str);
            while (!stream.atEnd() && !stream.hasError()) {
                stream.readNext();
                if (stream.tokenType() == QXmlStreamReader::StartElement) {
                    if (stream.name() == "a" && stream.attributes().value("href").toString() == "/naumv") {
                        stream.readNext();
                        qDebug() << stream.text();
                        break;
                    }
                }
            }
выводит
0
RazrFalcon
1386 / 1243 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.08.2014, 16:55 8
Выложите полное содержимое ui->webView->page()->currentFrame()->toHtml()
0
poss
Заблокирован
15.08.2014, 17:05  [ТС] 9
RazrFalcon, полный текст QString http://market.board4site.ru/html.txt
Кирилл1997, не та тема.
0
RazrFalcon
1386 / 1243 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.08.2014, 17:09 10
poss, так в том файле нет ни /naumv, ни Владислав Foips
1
Dmitriy_M
1428 / 1308 / 131
Регистрация: 20.03.2009
Сообщений: 4,677
Записей в блоге: 11
15.08.2014, 17:41 11
Лучший ответ Сообщение было отмечено poss как решение

Решение


Это называется руки не из того места растут.
C++ (Qt)
1
QWebElementCollection QWebFrame::findAllElements ( const QString & selectorQuery ) const
Селектор тут DIV.labeled name.
У каждого элемента отыскиваем все ссылки, а потом вытаскиваем нужный текст.
Пример разбора есть документации к QWebElement
0
15.08.2014, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 17:41

Регулярное выражение не работает
Здравствуйте всем. Пишу проект на Qt 5,8, операционка убунту, Задача: взять...

Регулярное выражение (QRegExp)
Добрый день. Помогите пожалуйста правильно составить регулярное выражение,...

Составить регулярное выражение
Есть html документ, в нем имеется несколько строк вида &lt;tag type=&quot;1&quot; name=&quot;2&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru