我编写正则表达式以从html中获取所有引用链接
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..." ....
答案 0 :(得分:1)
如果您确定自己知道自己在做什么,并且肯定知道自己想要这样做,那么首先请你read this?尝试为你的锚标签使用lookahead和lookbehind断言。
((?<=<a\\s+href\\s*=\\s*[^<>]*\\s*>)[^<>]*(?=</a>))
编辑:遗憾的是,这不会起作用(至少在qt4.8中)作为后瞻性断言are not supported。您可以遍历创建的列表并将所需的位与:
匹配[^<>]*(?=<)
并使用它,或者使用captured texts function来提取你想要用括号括起来的部分,如下所示:
<a\\s+href\\s*=\\s*[^<>]*\\s*>([^<>]*)</a>