Qt6 de QRegExp à QRegularExpression

La sortie de la version 6 de Qt rend la classe QRegExp obsolète, elle est remplacée par QRegularExpression, QRegularExpressionMatch, QRegularExpressionMatchIterator et QRegularExpressionValidator

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)));
    }
  }

.