1

我编写正则表达式以从 html 中获取所有 ref 链接

QRegExp bodylinksrx("(<a\\s+href\\s*=\\s*[^<>]*\\s*>[^<>]*</a>)");
QStringList bodylinks;
pos = 0;
while ((pos = bodylinksrx.indexIn(htmlcode, pos)) != -1)
{
    bodylinks << bodylinksrx.cap(1);
    pos += bodylinksrx.matchedLength();
}

我收到列表作为结果:

("<a href="http://somehref" class="someclass">href text...</a>", "<a href="http://somehref" class="someclass">href text...</a>", ......")

但我只需要接收列表"http://somehref" "href text..." "http://somehref" "href text..." ....

4

1 回答 1

1

首先你读过这个吗?其次,如果您确定自己知道自己在做什么,并且肯定知道自己想要这样做,请尝试对锚标签使用前瞻和后瞻断言。

((?<=<a\\s+href\\s*=\\s*[^<>]*\\s*>)[^<>]*(?=</a>))

编辑:不幸的是,这将不起作用(至少对于 qt4.8),因为不支持后向断言。您可以遍历创建的列表并将所需的位与:

[^<>]*(?=<)

并使用它,或者使用捕获的文本函数来提取你想要的部分,你将用括号括起来,如下所示:

<a\\s+href\\s*=\\s*[^<>]*\\s*>([^<>]*)</a>
于 2014-05-08T16:40:47.537 回答