2013-02-22 28 views
2

我正在下載一個網頁,並試圖從中提取一些值。使用QRegExp從html字符串中提取href值

,我感興趣的是這種類型的網頁的地方:

<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),其中包含從someurl第一次出現,直到的結束整個HTML串文件,其中沒有<a data-track="something" href="",它們全部被刪除。

+1

的位置HTTP ://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2013-02-22 20:41:14

+0

使用'QtWebKit'。不要使用正則表達式解析html。 – 2013-02-22 20:43:09

回答

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

您可以使用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(); 
}