Извлечь значение href из строки html с помощью QRegExp

Я загружаю веб-страницу и пытаюсь извлечь из нее некоторые значения.

Места страницы, которые меня интересуют, относятся к этому типу:

<a data-track=\"something\" href=\"someurl\" title=\"Heaven\"><img src=\"somesource.jpg\" /></a>

и мне нужно извлечь значение href (someurl). Обратите внимание, что в имеющейся у меня строке HTML есть несколько записей, подобных приведенной выше, и поэтому я буду использовать список для хранения всех URL-адресов, которые я извлекаю из строки.

Это то, что я пробовал до сих пор:

QString html_str=myfile();
QRegExp regex("<a data-track\\=\"something\" href\\=\".*(?=\" title)");
if(regex.indexIn(html_str) != -1){
    QStringList list;
    QString str;
    list = regex.capturedTexts();
    foreach(str,list)
        qDebug() << str.remove("<a data-track=\"something\" href=\"");
}

С приведенным выше кодом я получаю только одно вхождение (list.count() == 1), которое содержит всю строку HTML от первого вхождения someurl до конца файла без <a data-track="something" href="" в нем, которые все были удалены.


person hytromo    schedule 22.02.2013    source источник
comment
stackoverflow .com/questions/1732348/   -  person Moshe Shaham    schedule 23.02.2013
comment
Используйте 1_. Не анализируйте html с помощью регулярных выражений.   -  person Anirudh Ramanathan    schedule 23.02.2013


Ответы (2)


Я бы сделал это так: (убедитесь, что вы дважды проверяете свое регулярное выражение)

QRegExp regex("<a data-track=\"something\" href=\".*(?=\" title)");

if (regex.indexIn(html_str) != -1) qDebug() << html_str.cap().remove(<a data-track=\"something\" href=\");
person Niklas    schedule 16.02.2014

Вы можете использовать цикл while для управления положением "html_str"

pos = regex.indexIn(htmlContent);    // get the first position
while(pos = regex.indexIn(htmlContent, pos) != -1){    // continue next
    QStringList list;
    list = regex.capturedTexts();
    foreach(QString url, list) {
        // do something
    }
    pos += regex.matchedLength();
}
person hugle    schedule 21.02.2014