使用QRegExp从html字符串中提取href值

时间:2013-02-22 20:39:52

标签: html regex qt 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),其中包含从第一次出现someurl到文件末尾的整个HTML字符串,而不包含<a data-track="something" href=""它已被删除。

2 个答案:

答案 0 :(得分: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=\");

答案 1 :(得分: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();
}