0

我有以下函数,它应该给我来自正则表达式的匹配字符串:

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()应该还返回一些值`> 0`。

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

4

1 回答 1

3
[A-Z]* 

也可以匹配字符串VALUE和空字符串。见演示。第二个匹配将是0长度,因为VALUE匹配后什么都没有。

你可以试试[A-Z]+

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

string:   "VALUE"
           ^   ^
position:  0   4

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

于 2014-10-08T08:05:09.977 回答