Qt6 de QRegExp à QRegularExpression
Migration de QRegExp vers QRegularExpression
Voici les principales différences :
- rx.cap() par match.captured()
- if (rx.indexIn()) par QRegularExpressionMatch match = rx.match(searchString) et if (match.hasMatch())
- setCaseSensitivity() par .setPatternOptions()
Correspondance minimale :
La fonction setMinimal() implémentait une correspondance minimale ( QRegExp ne supportait pas certains quantificateurs comme *? , +? , etc.). QRegularExpression prend en charge ces quantificateurs. L'option de pattern InvertedGreedinessOption peut être utile pour émuler les effets de setMinimal()
Exemples
Validation
Ici pas trop de changement avec le validator
// Reg exp pour les emails
QRegularExpression mailRx("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b",QRegularExpression::CaseInsensitiveOption);
QValidator *validatorEmail = new QRegularExpressionValidator(mailRx, this);
ui->lineEdit_sEmail->setValidator(validatorEmail);
Boucle
Il est normalement possible d'utiliser la classe spécialisée QRegularExpressionMatchIterator mais j'ai rencontré quelques erreurs de loop infiny avec le while, c'est pourquoi je préfère utiliser la boucle for comme ceci :
for (const QRegularExpressionMatch &match : regex.globalMatch(text)) {
if (match.hasMatch()) {
for (int i = 0; i < regex.captureCount(); i++) {
qDebug() << "match" + QString::number(i) << match.captured(i);
}
// replace
text.replace(match.captured(0), theDate.toString(match.captured(1)));
}
}