正規表現から一致した文字列を取得する次の関数があります。
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
それからas lengthの意味がわかりません。ドキュメント(http://qt-project.org/doc/qt-4.8/qregexp.html#pattern)によると、一致する場合、インデックスは正の値であり、その場合、それが必要であると予想されmatchedLength()
ますまた、何らかの値 `> 0` を返します。
ここで何か誤解していますか、それとも Qt 5.2.1 の問題ですか?