正则表达式在QRegEx中给出错误的匹配

时间:2014-10-08 08:00:06

标签: c++ regex qt qregexp

我有以下函数,它应该为我提供正则表达式中匹配的字符串:

QString selectByPattern(QString const &oValue, QString const &oPattern, bool bRegularExpression) const
{
    QString s;
    QRegExp regex;

    // default
    regex.setPatternSyntax(QRegExp::RegExp);

    regex.setPattern(oPattern);
    int i = oValue.indexOf(regex);
    int l = regex.matchedLength();

    if(i == -1 || l < 1)
        return s;

    s = oValue.mid(i, l);

    return s;
}

我使用字符串*VALUE*作为输入来测试它。现在我得到以下结果:

 oPattern = "[A-Z]"
 Output = "V"

这是正确的。对于这种模式,它给出了第一个大写字符和长度为1。

但是当我使用它时:

 oPattern = "[A-Z]*"
 Output = ""

我不明白为什么。返回的索引是0,长度也是0。首先,当然索引是错误的,因为它应该是1。然后我不理解0作为长度的含义。根据文档(http://qt-project.org/doc/qt-4.8/qregexp.html#pattern)要么匹配,那么索引是正值,在这种情况下,我希望matchedLength()也应该返回一些值`&gt; 0``。

我在这里想到了什么,或者这是Qt 5.2.1中的问题?

1 个答案:

答案 0 :(得分:3)

[A-Z]* 

也可以匹配字符串VALUE和空字符串。 See demo。第二场比赛的长度为0,因为VALUE匹配后没有任何内容。

您可以尝试[A-Z]+

您的索引为0,因为字符串中的位置以0开头。

string:   "VALUE"
           ^   ^
position:  0   4

所以匹配(pos=0len=3)将是以下VAL,(pos=0len=1)是V和( pos=0len=0)是空字符串。