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です。まず第一に、もちろんインデックスは間違っています10それからas lengthの意味がわかりません。ドキュメント(http://qt-project.org/doc/qt-4.8/qregexp.html#pattern)によると、一致する場合、インデックスは正の値であり、その場合、それが必要であると予想されmatchedLength()ますまた、何らかの値 `> 0` を返します。

ここで何か誤解していますか、それとも Qt 5.2.1 の問題ですか?

4

1 に答える 1