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 这样的网站来验证和测试您的正则表达式!
我的应用程序下载 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 这样的网站来验证和测试您的正则表达式!