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

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

15.08.2014, 07:29. Просмотров 753. Ответов 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> ?
http://www.cyberforum.ru/qt/thread374056.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 07:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Регулярное выражение. Вытащить текст между дивами (C++ Qt):

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

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

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

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

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

10
Dmitriy_M
1411 / 1294 / 125
Регистрация: 20.03.2009
Сообщений: 4,606
Записей в блоге: 11
15.08.2014, 10:19 #2
Никто не парсит HTML регулярками.
1
Avazart
Эксперт С++
7674 / 5583 / 541
Регистрация: 10.12.2010
Сообщений: 25,045
Записей в блоге: 17
15.08.2014, 13:02 #3
Я парсю...

А смысл, чет другое юзать для того что бы только вытащить пару слов?
1
Dmitriy_M
1411 / 1294 / 125
Регистрация: 20.03.2009
Сообщений: 4,606
Записей в блоге: 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
1384 / 1241 / 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
1384 / 1241 / 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
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
15.08.2014, 17:09 #10
poss, так в том файле нет ни /naumv, ни Владислав Foips
1
Dmitriy_M
1411 / 1294 / 125
Регистрация: 20.03.2009
Сообщений: 4,606
Записей в блоге: 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
Привет! Вот еще темы с решениями:

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

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

Немного исправить регулярное выражение
Вообщем написал(без изучения, по примерам):...

Регулярное выражение для дробного числа от 0 до 1
Помогите составить регулярное выражение для дробного числа от 0 до 1. Число...


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

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

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