У меня есть следующие функции, которые должны дать мне найденную строку из регулярного выражения:Регулярное выражение дает неправильные матчи в QRegEx
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?
Странно. Это работает правильно, но, согласно документам, и, насколько мне известно, регулярное выражение (которое довольно ограничено), это должно работать. – Devolus