Я вижу, что существует новый класс для регулярных выражений - QRegularExpression
. Это просто typedef для QRegExp, или новый класс, или что? И зачем нам это нужно, у нас уже есть QRegExp?Есть ли разница между QRegularExpression и QRegExp?
ответ
Хорошо, после некоторого углубления в документы я нашел, что это действительно новый класс, у него есть улучшения, но он доступен только в Qt5, поэтому вы не можете его использовать, если хотите скомпилировать как на Qt4 и Qt5:
Заметки для QRegExp Пользователи
QRegularExpression класса введен в Qt 5 представляет собой большой шаг вперед по QRegExp, с точки зрения API, предлагаемых, поддерживаемый синтаксис модели и скорость исполнения. Самое большое различие заключается в том, что QRegularExpression просто содержит регулярное выражение, и оно не изменяется, когда запрашивается совпадение. Вместо этого возвращается объект QRegularExpressionMatch, чтобы проверить результат совпадения и извлечь захваченную подстроку. То же самое относится к глобальному сопоставлению и QRegularExpressionMatchIterator.
По крайней мере, для Qt 4.8. Я могу дать очень практическую причину для использования QRegularExpressions
вместо QRegExp
:
Насколько опасны для вас эти опасения?
int index = myQString.indexOf(myQRegExp);
bool okay = myQString.contains(myQRegExp);
Обе линии могут повредить вашу кучу, сбой или повесить ваше приложение. Я испытал повреждение кучи и повесил с Qt 4.8. Сообщение в блоге QString::indexOf() versus Qt 4.5 объясняет, что QString::indexOf()
изменяет объект const QRegExp
. QString::contains()
inlines QString::indexOf()
, так что это та же проблема.
Если вы застряли с Qt4 и, таким образом QRegExp, вы могли бы использовать
int index = myQRegExp.indexIn(myQString);
bool okay = (myQRegExp.indexIn(myQString) != -1);
в ваших источниках вместо этого. Или исправить источники Qt.
Да, я потратил некоторое время на то, чтобы написать полную документацию для QRegularExpession, так что это так :) – peppe
Ты имеешь в виду, что написал эту часть документов? – sashoalm
Я написал весь класс. Если вы считаете, что документы могут быть улучшены, отправьте такое предложение на bugreport. – peppe