QString::split(const QRegularExpression) 问题

QString::split(const QRegularExpression) issue

我的应用程序下载 HTML 网页源代码,然后尝试提取 html 行 (tr)。 我的代码:

QStringList linesPage1 = page1.split(QRegularExpression("<tr.*>"));

但是当我这样做时:

qDebug() << linesPage1;

我知道了:

("<table width=\"1085\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">", "")

当我尝试这段代码时,他发现出现了 31 次:

qDebug() << page1.count(QRegularExpression("<tr.*>"));

我不明白他为什么要计算 31 次出现,但另一方面,他没有拆分字符串。

问题出在你的正则表达式上。它尝试匹配以 <tr 开头并以 > 结尾的字符串。它将查找该字符串的 longest appearance。在您的情况下,它将从第一个 <tr 开始,直到文档结束(因为 HTML 以 > 结束)。

要避免这种情况,请使用:<tr[^>]*>。这样它只会匹配 <tr ...>,因为除 > 之外的任何字符串都允许在两者之间。

尝试使用像 https://regex101.com/#pcre 这样的网站来验证和测试您的正则表达式!