2013-02-22 3 views
2

Я загружаю веб-страницу, и я пытаюсь извлечь из нее некоторые значения.Извлечь значение 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="" в нем, которые были удалены.

+1

HTTP : //stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+0

Используйте 'QtWebKit'. Не анализируйте html с помощью регулярных выражений. –

ответ

0

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

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

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

Вы можете использовать время цикла для управления положение «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(); 
}