关于正则的两个有关问题

关于正则的两个问题
第一个问题如下面代码:  
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--”,且只有这么一个符合条件。
大家帮我分析下啊,谢谢了。
正则

------解决方案--------------------
1.  ?: 表示只进行匹配, 不将匹配的结果记入分组里面. 比如
  "(\\d+)(?:\\s*)(cm
------解决方案--------------------
inch)" 匹配 "189 cm" 的结果是:  "189", "cm"
   "(\\d+)(\\s*)(cm
------解决方案--------------------
inch)" 匹配 "189 cm" 的结果就是: "189", " ", "cm" 

2. 匹配结果的第 0 项表示整个匹配的字符串, 第一项才表示匹配的第一个分组, 第二项表示匹配的第二个分组...

3. cap(1) 是匹配的字符串里的第一个分组, 不是整个匹配的字符串. 第一个分组是 (\\w+) 部分, 所以是 "Hello"