我有以下函数,它应该为我提供正则表达式中匹配的字符串:
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中的问题?
答案 0 :(得分:3)
[A-Z]*
也可以匹配字符串VALUE
和空字符串。 See demo。第二场比赛的长度为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
)是空字符串。