2

我正在下载一个网页,并试图从中提取一些值。

我感兴趣的页面位置属于这种类型:

<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=""

4

2 回答 2

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=\");
于 2014-02-16T15:05:25.853 回答
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();
}
于 2014-02-21T05:23:21.353 回答