我对QRegExp课程没有任何问题,但现在我有了一个。我的密码
QRegExp re("d class=\\.green\\.>([+,0-9]+)<.td><td>[.0-9]+<.td><td>[.0-9]+<..n");
QString str=AliorLinia;
qDebug()<<str;
QStringList list;
int pos=0;
while((pos=re.indexIn(str, pos))!=-1){
list << re.cap(1);
pos+=re.matchedLength();
}
qDebug()<<list;控制台给我看

,str线在屏幕上。
控制台应该显示+0,10,但它只显示()为什么:(?)
发布于 2017-04-16 20:57:38
您没有得到匹配,因为真正的文字字符串看起来像
d class="green">+0.10</td><td>69.7</td><td>69.0</
<NEWLINE>您在调试器中看到的\"和\n只是告诉您字符串文字包含一个文字双引号和一个换行符(十进制代码为10的字符)。
此外,您的数字包含一个.,而不是,作为小数分隔符,因此必须将它添加到[+,0-9]字符类中。
因此,您的正则表达式只要进行最小的修改,就可以像
QRegExp re("d class=.green.>([+.,0-9]+)<.td><td>[.0-9]+<.td><td>[.0-9]+<.\n");请参阅regex演示
发布于 2017-04-16 19:27:58
因为regex模式要求green属性被圆点所包围--这就是\\.在引用字符串中的意思。
您真正想要的正则表达式是\\. (即反斜杠后面跟着任何字符),这是正确的。但是在C字符串文本中,这两个反斜杠中的每一个都应该通过一个额外的斜杠来转义:
QRegExp re("d class=\\\\.green\\\\.>([+,0-9]+)<.td><td>[.0-9]+<.td><td>[.0-9]+<..n");
^ ^ ^ ^
add these backslasheshttps://stackoverflow.com/questions/43441129
复制相似问题