读书人

关于正则的两个有关问题

发布时间: 2013-06-25 23:45:41 作者: rapoo

关于正则的两个问题
第一个问题如下面代码:
QRegExp rxlen("(\\d+)(?:\\s*)(cm|inch)");
int pos3 = rxlen.indexIn("Length: 189cm");
if (pos3 > -1) {
QString value = rxlen.cap(1); // 结果为189
QString unit = rxlen.cap(2); // 结果为cm
QString string = rxlen.cap(0); // 结果为189cm
qDebug() << value << unit << string;
}
小问题1:(?:\\s*)这个代表什么意思?
小问题2:为什么QString string = rxlen.cap(0);的结果为189cm??.cap(0)和.cap(1)我能理解,就是代表匹配后的第一和第二个字符,但是.cap(0)不清楚什么意思。
第二个问题乳下面代码:

QRegExp rx5("\\b(\\w+)\\W+\\1\\b");
rx5.setCaseSensitivity(Qt::CaseInsensitive); // 设置不区分大小写
qDebug() << rx5.indexIn("Hello--hello"); // 结果为0
qDebug() << rx5.cap(1); // 结果为Hello
小问题3:我觉得qDebug() << rx5.cap(1); 这条语句执行后的代码应该是“Hello--”,但是为什么是“Hello”呢,我觉得"Hello--hello"符合匹配规则的是“Hello--”,且只有这么一个符合条件。
大家帮我分析下啊,谢谢了。

读书人网 >C++

热点推荐