Sur cette page

QRegularExpression Class

La classe QRegularExpression permet la recherche de correspondances à l'aide d'expressions régulières. En savoir plus...

En-tête : #include <QRegularExpression>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Remarque : toutes les fonctions de cette classe sont réentrantes.

Comparaisons QRegularExpression

CatégorieTypes comparables
égalitéQRegularExpression

Types publics

enum MatchOption { NoMatchOption, AnchoredMatchOption, AnchorAtOffsetMatchOption, DontCheckSubjectStringMatchOption }
flags MatchOptions
enum MatchType { NormalMatch, PartialPreferCompleteMatch, PartialPreferFirstMatch, NoMatch }
enum PatternOption { NoPatternOption, CaseInsensitiveOption, DotMatchesEverythingOption, MultilineOption, ExtendedPatternSyntaxOption, …, UseUnicodePropertiesOption }
flags PatternOptions
(since 6.0) enum WildcardConversionOption { DefaultWildcardConversion, UnanchoredWildcardConversion, NonPathWildcardConversion }
flags WildcardConversionOptions

Fonctions publiques

QRegularExpression()
QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = NoPatternOption)
QRegularExpression(const QRegularExpression &re)
(since 6.1) QRegularExpression(QRegularExpression &&re)
~QRegularExpression()
int captureCount() const
QString errorString() const
QRegularExpressionMatchIterator globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
(since 6.5) QRegularExpressionMatchIterator globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
bool isValid() const
QRegularExpressionMatch match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
(since 6.5) QRegularExpressionMatch matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const
QStringList namedCaptureGroups() const
void optimize() const
QString pattern() const
qsizetype patternErrorOffset() const
QRegularExpression::PatternOptions patternOptions() const
void setPattern(const QString &pattern)
void setPatternOptions(QRegularExpression::PatternOptions options)
void swap(QRegularExpression &other)
QRegularExpression &operator=(QRegularExpression &&re)
QRegularExpression &operator=(const QRegularExpression &re)

Membres publics statiques

QString anchoredPattern(QStringView expression)
QString anchoredPattern(const QString &expression)
QString escape(QStringView str)
QString escape(const QString &str)
(since 6.0) QRegularExpression fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
QString wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
QString wildcardToRegularExpression(const QString &pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)
size_t qHash(const QRegularExpression &key, size_t seed = 0)
bool operator!=(const QRegularExpression &lhs, const QRegularExpression &rhs)
QDataStream &operator<<(QDataStream &out, const QRegularExpression &re)
QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions)
QDebug operator<<(QDebug debug, const QRegularExpression &re)
bool operator==(const QRegularExpression &lhs, const QRegularExpression &rhs)
QDataStream &operator>>(QDataStream &in, QRegularExpression &re)

Description détaillée

Les expressions régulières, ou regexps, constituent un outil très puissant pour traiter les chaînes de caractères et les textes. Elles s'avèrent utiles dans de nombreux contextes, par exemple :

la validationUne expression régulière permet de vérifier si une sous-chaîne répond à certains critères, par exemple si elle est un nombre entier ou si elle ne contient aucun espace.
RechercheUne expression régulière offre des capacités de correspondance de motifs plus puissantes que la simple recherche de sous-chaînes ; par exemple, elle permet de trouver l’un des mots « mail », « lettre » ou « correspondance », mais aucun des mots « e-mail », « mailman », « mailer », « boîte aux lettres », etc.
Recherche et remplacementUne expression régulière permet de remplacer toutes les occurrences d’une sous-chaîne par une autre sous-chaîne, par exemple remplacer toutes les occurrences de « & » par « &amp; », sauf lorsque le « & » est déjà suivi d’un « amp; ».
Fractionnement de chaînesUne expression régulière peut être utilisée pour identifier où une chaîne doit être divisée, par exemple pour diviser des chaînes délimitées par des tabulations.

Ce document ne constitue en aucun cas une référence exhaustive sur la correspondance de motifs à l'aide d'expressions régulières, et les parties suivantes nécessiteront que le lecteur dispose de connaissances de base sur les expressions régulières de type Perl et leur syntaxe de motifs.

Voici quelques bonnes références sur les expressions régulières :

Introduction

QRegularExpression implémente les expressions régulières compatibles avec Perl. Il prend entièrement en charge Unicode. Pour un aperçu de la syntaxe des expressions régulières prise en charge par QRegularExpression, veuillez vous reporter à la page de manuel pcrepattern(3) mentionnée ci-dessus. Une expression régulière se compose de deux éléments : une chaîne de motif et un ensemble d'options de motif qui modifient la signification de la chaîne de motif.

Vous pouvez définir la chaîne de motif en transmettant une chaîne au constructeur de QRegularExpression :

QRegularExpression re("a pattern");

Cela définit la chaîne de motif sur a pattern. Vous pouvez également utiliser la fonction setPattern() pour définir un motif sur un objet QRegularExpression existant :

QRegularExpression re;
re.setPattern("another pattern");

Notez qu’en raison des règles relatives aux chaînes littérales en C++, vous devez échapper toutes les barres obliques inversées présentes dans la chaîne de motif à l’aide d’une autre barre oblique inversée :

// matches two digits followed by a space and a word
QRegularExpression re("\\d\\d \\w+");

// matches a backslash
QRegularExpression re2("\\\\");

Vous pouvez également utiliser une chaîne littérale brute; dans ce cas, vous n’avez pas besoin d’échapper les barres obliques inversées dans le motif, car tous les caractères situés entre R"(...)" sont considérés comme des caractères bruts. Comme vous pouvez le voir dans l’exemple suivant, cela simplifie l’écriture des motifs :

// matches two digits followed by a space and a word
QRegularExpression re(R"(\d\d \w+)");

La fonction pattern() renvoie le motif actuellement défini pour un objet QRegularExpression :

QRegularExpression re("a third pattern");
QString pattern = re.pattern(); // pattern == "a third pattern"

Options de motif

La signification de la chaîne de motif peut être modifiée en définissant une ou plusieurs options de motif. Par exemple, il est possible de configurer un motif pour qu’il effectue une correspondance sans distinction de casse en définissant l’option ` QRegularExpression::CaseInsensitiveOption`.

Vous pouvez définir ces options en les transmettant au constructeur de QRegularExpression, comme suit :

// matches "Qt rocks", but also "QT rocks", "QT ROCKS", "qT rOcKs", etc.
QRegularExpression re("Qt rocks", QRegularExpression::CaseInsensitiveOption);

Vous pouvez également utiliser la fonction ` setPatternOptions()` sur un objet `QRegularExpressionObject` existant :

QRegularExpression re("^\\d+$");
re.setPatternOptions(QRegularExpression::MultilineOption);
// re matches any line in the subject string that contains only digits (but at least one)

Il est possible de récupérer les options de motif actuellement définies sur un objet QRegularExpression à l'aide de la fonction patternOptions() :

QRegularExpression re = QRegularExpression("^two.*words$", QRegularExpression::MultilineOption
                                                        | QRegularExpression::DotMatchesEverythingOption);

QRegularExpression::PatternOptions options = re.patternOptions();
// options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption

Veuillez vous reporter à la documentation relative à l'énumération QRegularExpression::PatternOption pour plus d'informations sur chaque option de motif.

Type de correspondance et options de correspondance

Les deux derniers arguments des fonctions match() et globalMatch() permettent de définir le type de correspondance et les options de correspondance. Le type de correspondance est une valeur de l'énumération QRegularExpression::MatchType; l'algorithme de correspondance « traditionnel » est sélectionné en utilisant le type de correspondance NormalMatch (valeur par défaut). Il est également possible d'activer la correspondance partielle de l'expression régulière par rapport à une chaîne de caractères : consultez la section partial matching pour plus de détails.

Les options de correspondance constituent un ensemble d’une ou plusieurs valeurs de l’énumération QRegularExpression::MatchOption. Elles modifient la manière dont s’effectue une correspondance spécifique entre une expression régulière et une chaîne de caractères. Veuillez vous reporter à la documentation de l’énumération QRegularExpression::MatchOption pour plus de détails.

Correspondance normale

Pour effectuer une correspondance, il suffit d’appeler la fonction ` match()` en lui passant une chaîne à comparer. Cette chaîne est appelée « chaîne sujet ». La fonction ` match()` renvoie un objet ` QRegularExpressionMatch ` qui permet d’examiner les résultats de la correspondance. Par exemple :

// match two digits followed by a space and a word
QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
bool hasMatch = match.hasMatch(); // true

Si la recherche aboutit, le groupe de capture (implicite) numéro 0 peut être utilisé pour récupérer la sous-chaîne correspondant à l’ensemble du motif (voir également la section consacrée à extracting captured substrings):

QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("abc123 def");
if (match.hasMatch()) {
    QString matched = match.captured(0); // matched == "23 def"
    // ...
}

Il est également possible de démarrer une recherche à un décalage arbitraire à l’intérieur de la chaîne de caractères en passant ce décalage en argument de la fonction ` match()`. Dans l’exemple suivant, ` "12 abc" ` n’est pas trouvé car la recherche commence au décalage 1 :

QRegularExpression re("\\d\\d \\w+");
QRegularExpressionMatch match = re.match("12 abc 45 def", 1);
if (match.hasMatch()) {
    QString matched = match.captured(0); // matched == "45 def"
    // ...
}

Extraction des sous-chaînes capturées

L’objet ` QRegularExpressionMatch ` contient également des informations sur les sous-chaînes capturées par les groupes de capture dans la chaîne de motif. La fonction ` captured()` renvoie la chaîne capturée par le n-ième groupe de capture :

QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");
QRegularExpressionMatch match = re.match("08/12/1985");
if (match.hasMatch()) {
    QString day = match.captured(1); // day == "08"
    QString month = match.captured(2); // month == "12"
    QString year = match.captured(3); // year == "1985"
    // ...
}

Les groupes de capture du motif sont numérotés à partir de 1, et le groupe de capture implicite 0 sert à capturer la sous-chaîne qui correspond à l'intégralité du motif.

Il est également possible de récupérer les indices de début et de fin (dans la chaîne sujet) de chaque sous-chaîne capturée, à l'aide des fonctions ` capturedStart()` et ` capturedEnd()` :

QRegularExpression re("abc(\\d+)def");
QRegularExpressionMatch match = re.match("XYZabc123defXYZ");
if (match.hasMatch()) {
    int startOffset = match.capturedStart(1); // startOffset == 6
    int endOffset = match.capturedEnd(1); // endOffset == 9
    // ...
}

Toutes ces fonctions disposent d’une surcharge prenant un ` QString ` en paramètre afin d’extraire des sous-chaînes capturées nommées. Par exemple :

QRegularExpression re("^(?<date>\\d\\d)/(?<month>\\d\\d)/(?<year>\\d\\d\\d\\d)$");
QRegularExpressionMatch match = re.match("08/12/1985");
if (match.hasMatch()) {
    QString date = match.captured("date"); // date == "08"
    QString month = match.captured("month"); // month == "12"
    QString year = match.captured("year"); // year == 1985
}

Correspondance globale

La correspondance globale est utile pour trouver toutes les occurrences d’une expression régulière donnée à l’intérieur d’une chaîne de caractères. Supposons que l’on souhaite extraire tous les mots d’une chaîne donnée, un mot étant une sous-chaîne correspondant au motif \w+.

QRegularExpression::globalMatch renvoie un objet de type ` QRegularExpressionMatchIterator`, qui est un itérateur avant de type Java pouvant être utilisé pour parcourir les résultats. Par exemple :

QRegularExpression re("(\\w+)");
QRegularExpressionMatchIterator i = re.globalMatch("the quick fox");

Comme il s'agit d'un itérateur de type Java, l'QRegularExpressionMatchIterator pointera immédiatement avant le premier résultat. Chaque résultat est renvoyé sous la forme d'un objet ` QRegularExpressionMatch `. La fonction ` hasNext()` renverra `true` s'il reste au moins un résultat, et ` next()` renverra le résultat suivant et fera avancer l'itérateur. Pour reprendre l'exemple précédent :

QStringList words;
while (i.hasNext()) {
    QRegularExpressionMatch match = i.next();
    QString word = match.captured(1);
    words << word;
}
// words contains "the", "quick", "fox"

Vous pouvez également utiliser ` peekNext()` pour obtenir le résultat suivant sans faire avancer l’itérateur.

Il est également possible d’utiliser simplement le résultat de ` QRegularExpression::globalMatch ` dans une boucle `for` basée sur une plage, par exemple comme ceci :

// using a raw string literal, R"(raw_characters)", to be able to use "\w"
// without having to escape the backslash as "\\w"
QRegularExpression re(R"(\w+)");
QString subject("the quick fox");
for (const QRegularExpressionMatch &match : re.globalMatch(subject)) {
    // ...
}

Il est possible de passer un décalage de départ et une ou plusieurs options de correspondance à la fonction globalMatch(), exactement comme pour une correspondance normale avec match().

Correspondance partielle

On obtient une correspondance partielle lorsque la fin de la chaîne sujet est atteinte, mais qu'il manque encore des caractères pour que la correspondance soit complète. Notez qu'une correspondance partielle est généralement beaucoup moins efficace qu'une correspondance normale, car de nombreuses optimisations de l'algorithme de correspondance ne peuvent pas être utilisées.

Une correspondance partielle doit être explicitement demandée en spécifiant un type de correspondance « PartialPreferCompleteMatch » ou « PartialPreferFirstMatch » lors de l’appel de « QRegularExpression::match » ou « QRegularExpression::globalMatch ». Si une correspondance partielle est trouvée, l’appel de la fonction « hasMatch() » sur l’objet « QRegularExpressionMatch » renvoyé par « match() » renverra « false », mais « hasPartialMatch() » renverra « true ».

Lorsqu’une correspondance partielle est trouvée, aucune sous-chaîne capturée n’est renvoyée, et le groupe de capture (implicite) 0, correspondant à la correspondance complète, capture la sous-chaîne partiellement correspondante de la chaîne sujet.

Notez que la recherche d’une correspondance partielle peut tout de même aboutir à une correspondance complète, si celle-ci est trouvée ; dans ce cas, ` hasMatch()` renverra ` true ` et ` hasPartialMatch()` renverra ` false`. Il n’arrive jamais qu’une fonction ` QRegularExpressionMatch ` signale à la fois une correspondance partielle et une correspondance complète.

La correspondance partielle est principalement utile dans deux cas de figure : la validation en temps réel des saisies utilisateur et la correspondance incrémentielle ou multisegment.

Validation des données saisies par l’utilisateur

Supposons que nous souhaitions que l'utilisateur saisisse une date dans un format spécifique, par exemple « MMM jj, aaaa ». Nous pouvons vérifier la validité de la saisie à l'aide d'un modèle tel que :

^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d\d?, \d\d\d\d$

(Ce modèle ne détecte pas les jours non valides, mais conservons-le pour les besoins de l'exemple).

Nous souhaitons valider la saisie à l'aide de cette expression régulière au fur et à mesure que l'utilisateur la saisit, afin de pouvoir signaler une erreur dès qu'elle se produit (par exemple, si l'utilisateur appuie sur la mauvaise touche). Pour ce faire, nous devons distinguer trois cas :

  • la saisie ne peut en aucun cas correspondre à l'expression régulière ;
  • la saisie correspond à l'expression régulière ;
  • la saisie ne correspond pas à l'expression régulière pour le moment, mais elle y correspondra si d'autres caractères y sont ajoutés.

Notez que ces trois cas représentent exactement les états possibles d'un « QValidator » (voir l'énumération « QValidator::State »).

En particulier, dans le dernier cas, nous souhaitons que le moteur d’expressions régulières signale une correspondance partielle : nous parvenons à faire correspondre le motif à la chaîne sujet, mais la correspondance ne peut se poursuivre car la fin de la chaîne sujet a été atteinte. Notez toutefois que l’algorithme de correspondance doit se poursuivre et tester toutes les possibilités ; si une correspondance complète (et non partielle) est trouvée, celle-ci doit alors être signalée, et la chaîne d’entrée acceptée comme entièrement valide.

Ce comportement est implémenté par le type de correspondance « PartialPreferCompleteMatch ». Par exemple :

QString pattern("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d?, \\d\\d\\d\\d$");
QRegularExpression re(pattern);

QString input("Jan 21,");
QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true

Si l’application de la même expression régulière à la chaîne sujet aboutit à une correspondance complète, celle-ci est signalée comme d’habitude :

QString input("Dec 8, 1985");
QRegularExpressionMatch match = re.match(input, 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch(); // true
bool hasPartialMatch = match.hasPartialMatch(); // false

Voici un autre exemple avec un motif différent, illustrant le comportement consistant à privilégier une correspondance complète plutôt qu'une correspondance partielle :

QRegularExpression re("abc\\w+X|def");
QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch(); // true
bool hasPartialMatch = match.hasPartialMatch(); // false
QString captured = match.captured(0); // captured == "def"

Dans ce cas, le sous-motif abc\\w+X correspond partiellement à la chaîne de caractères ; cependant, le sous-motif def correspond entièrement à la chaîne de caractères, et c'est donc une correspondance complète qui est signalée.

Si plusieurs correspondances partielles sont trouvées lors de la recherche (mais aucune correspondance complète), l'objet QRegularExpressionMatch signalera la première trouvée. Par exemple :

QRegularExpression re("abc\\w+X|defY");
QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpression::PartialPreferCompleteMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true
QString captured = match.captured(0); // captured == "abcdef"

Correspondance incrémentielle/multisegment

La recherche incrémentielle est un autre cas d’utilisation de la correspondance partielle. Supposons que l’on souhaite trouver les occurrences d’une expression régulière au sein d’un texte volumineux (c’est-à-dire les sous-chaînes correspondant à l’expression régulière). Pour ce faire, on souhaite « alimenter » les moteurs d’expressions régulières avec ce texte volumineux par petits morceaux. Le problème évident est de savoir ce qui se passe si la sous-chaîne qui correspond à l’expression régulière s’étend sur deux segments ou plus.

Dans ce cas, le moteur d'expressions régulières doit signaler une correspondance partielle, afin que nous puissions effectuer une nouvelle recherche en ajoutant de nouvelles données et (à terme) obtenir une correspondance complète. Cela implique que le moteur d’expressions régulières peut supposer qu’il existe d’autres caractères au-delà de la fin de la chaîne de recherche. Il ne faut pas prendre cela au pied de la lettre : le moteur n’essaiera jamais d’accéder à un caractère situé après le dernier de la chaîne de recherche.

QRegularExpression met en œuvre ce comportement lorsqu’on utilise le type de correspondance « PartialPreferFirstMatch ». Ce type de correspondance signale une correspondance partielle dès qu’elle est trouvée, et les autres alternatives de correspondance ne sont pas testées (même si elles pourraient aboutir à une correspondance complète). Par exemple :

QRegularExpression re("abc|ab");
QRegularExpressionMatch match = re.match("ab", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true

Cela s'explique par le fait que, lors de la recherche de la première branche de l'opérateur d'alternative, une correspondance partielle est trouvée, ce qui met fin à la recherche sans que la deuxième branche ne soit testée. Autre exemple :

QRegularExpression re("abc(def)?");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true

Cela illustre ce qui peut sembler être un comportement contre-intuitif des quantificateurs : comme la règle « ? » est gloutonne, le moteur tente d’abord de poursuivre la correspondance après avoir trouvé une correspondance avec « "abc" » ; mais la correspondance atteint alors la fin de la chaîne sujet, et une correspondance partielle est donc signalée. Cela est encore plus surprenant dans l’exemple suivant :

QRegularExpression re("(abc)*");
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpression::PartialPreferFirstMatch);
bool hasMatch = match.hasMatch(); // false
bool hasPartialMatch = match.hasPartialMatch(); // true

Il est facile de comprendre ce comportement si l’on se souvient que le moteur s’attend à ce que la chaîne sujet ne soit qu’une sous-chaîne du texte complet dans lequel on recherche une correspondance (c’est-à-dire, comme nous l’avons dit précédemment, que le moteur suppose qu’il y a d’autres caractères au-delà de la fin de la chaîne sujet).

Comme le quantificateur « * » est glouton, signaler une correspondance complète pourrait constituer une erreur, car après l’ "abc" e sujet actuelle, il pourrait y avoir d’autres occurrences de « "abc" ». Par exemple, le texte complet aurait pu être « abcabcX », et la correspondance correcte à signaler (dans le texte complet) aurait donc été « "abcabc" » ; en ne faisant correspondre que la partie initiale « "abc" », on obtient au contraire une correspondance partielle.

Gestion des erreurs

Il est possible qu’un objet `QRegularExpression` soit invalide en raison d’erreurs de syntaxe dans la chaîne de motif. La fonction ` isValid()` renvoie `true` si l’expression régulière est valide, ou `false` dans le cas contraire :

QRegularExpression invalidRe("(unmatched|parenthesis");
bool isValid = invalidRe.isValid(); // false

Vous pouvez obtenir plus d’informations sur l’erreur spécifique en appelant la fonction ` errorString()` ; de plus, la fonction ` patternErrorOffset()` renverra l’offset à l’intérieur de la chaîne de motif

QRegularExpression invalidRe("(unmatched|parenthesis");
if (!invalidRe.isValid()) {
    QString errorString = invalidRe.errorString(); // errorString == "missing )"
    int errorOffset = invalidRe.patternErrorOffset(); // errorOffset == 22
    // ...
}

Si une correspondance est tentée avec une expression QRegularExpression non valide, l’objet QRegularExpressionMatch renvoyé sera également invalide (c’est-à-dire que sa fonction isValid() renverra false). Il en va de même pour les tentatives de correspondance globale.

Fonctionnalités des expressions régulières compatibles Perl non prises en charge

QRegularExpression ne prend pas en charge toutes les fonctionnalités disponibles dans les expressions régulières compatibles Perl. La plus notable est le fait que les noms dupliqués pour les groupes de capture ne sont pas pris en charge, et leur utilisation peut entraîner un comportement indéfini.

Cela pourrait changer dans une future version de Qt.

Débogage du code utilisant QRegularExpression

QRegularExpression utilise en interne un compilateur « just-in-time » (JIT) pour optimiser l’exécution de l’algorithme de correspondance. Le JIT recourt largement au code auto-modifiable, ce qui peut entraîner le plantage d’outils de débogage tels que Valgrind. Vous devez activer toutes les vérifications relatives au code auto-modifiable si vous souhaitez déboguer des programmes utilisant QRegularExpression (par exemple, l'option de ligne de commande « --smc-check » de Valgrind). L'inconvénient de l'activation de ces vérifications est que votre programme s'exécutera de manière nettement plus lente.

Pour éviter cela, le JIT est désactivé par défaut si vous compilez Qt en mode débogage. Il est possible de passer outre ce comportement par défaut et d’activer ou de désactiver l’utilisation du JIT (aussi bien en mode débogage qu’en mode production) en définissant la variable d’environnement ` QT_ENABLE_REGEXP_JIT ` respectivement sur une valeur non nulle ou nulle.

Voir également QRegularExpressionMatch et QRegularExpressionMatchIterator.

Documentation sur les types de membres

enum QRegularExpression::MatchOption
flags QRegularExpression::MatchOptions

ConstanteValeurDescription
QRegularExpression::NoMatchOption0x0000Aucune option de correspondance n'est définie.
QRegularExpression::AnchoredMatchOptionAnchorAtOffsetMatchOptionUtilisez plutôt l'option AnchorAtOffsetMatchOption.
QRegularExpression::AnchorAtOffsetMatchOption0x0001Pour que la correspondance aboutisse, elle doit nécessairement commencer exactement au décalage passé à la fonction match(), même si la chaîne de motif ne contient aucun métacaractère ancrant la correspondance à cet endroit. Notez que le fait de passer cette option n'ancre pas la fin de la correspondance à la fin de la chaîne sujet ; si vous souhaitez ancrer entièrement une expression régulière, utilisez anchoredPattern(). Cette valeur d'énumération a été introduite dans Qt 6.0.
QRegularExpression::DontCheckSubjectStringMatchOption0x0002La validité UTF-16 de la chaîne cible n’est pas vérifiée avant de tenter une correspondance. Utilisez cette option avec une extrême prudence, car tenter de faire correspondre une chaîne non valide peut provoquer le plantage du programme et/ou constituer un problème de sécurité. Cette valeur d’énumération a été introduite dans Qt 5.4.

Le type `MatchOptions` est un `typedef` pour ` QFlags<MatchOption>`. Il stocke une combinaison « OU » de valeurs `MatchOption`.

enum QRegularExpression::MatchType

L'énumération MatchType définit le type de correspondance à rechercher dans la chaîne de caractères en question.

ConstanteValeurDescription
QRegularExpression::NormalMatch0Une correspondance normale est effectuée.
QRegularExpression::PartialPreferCompleteMatch1La chaîne de motif est comparée partiellement à la chaîne cible. Si une correspondance partielle est trouvée, elle est enregistrée, puis d’autres alternatives de correspondance sont testées comme d’habitude. Si une correspondance complète est ensuite trouvée, elle est privilégiée par rapport à la correspondance partielle ; dans ce cas, seule la correspondance complète est signalée. Si, au contraire, aucune correspondance complète n’est trouvée (mais uniquement la correspondance partielle), c’est cette dernière qui est signalée.
QRegularExpression::PartialPreferFirstMatch2La chaîne de motif est comparée partiellement à la chaîne cible. Si une correspondance partielle est trouvée, la recherche s'arrête et la correspondance partielle est signalée. Dans ce cas, les autres possibilités de correspondance (pouvant éventuellement mener à une correspondance complète) ne sont pas testées. De plus, ce type de correspondance suppose que la chaîne sujet n’est qu’une sous-chaîne d’un texte plus long, et que (dans ce texte) il existe d’autres caractères au-delà de la fin de la chaîne sujet. Cela peut conduire à des résultats surprenants ; voir la discussion dans la section « partial matching » pour plus de détails.
QRegularExpression::NoMatch3Aucune correspondance n’est effectuée. Cette valeur est renvoyée comme type de correspondance par un objet ` QRegularExpressionMatch ` ou ` QRegularExpressionMatchIterator` construit par défaut. L’utilisation de ce type de correspondance n’est pas très utile pour l’utilisateur, car aucune correspondance n’a jamais lieu. Cette valeur d’énumération a été introduite dans Qt 5.1.

enum QRegularExpression::PatternOption
flags QRegularExpression::PatternOptions

L'énumération `PatternOption` définit des modificateurs qui déterminent la manière dont la chaîne de motif doit être interprétée, et donc la manière dont le motif est mis en correspondance avec une chaîne cible.

ConstanteValeurDescription
QRegularExpression::NoPatternOption0x0000Aucune option de motif n'est définie.
QRegularExpression::CaseInsensitiveOption0x0001Le motif doit correspondre à la chaîne cible sans distinction de casse. Cette option correspond au modificateur /i dans les expressions régulières Perl.
QRegularExpression::DotMatchesEverythingOption0x0002Le métacaractère point (.) dans la chaîne de motif est autorisé à correspondre à n'importe quel caractère de la chaîne cible, y compris les sauts de ligne (normalement, le point ne correspond pas aux sauts de ligne). Cette option correspond au modificateur « /s » dans les expressions régulières Perl.
QRegularExpression::MultilineOption0x0004Les métacaractères « caret » (^) et « dollar » ($) dans la chaîne de motif sont autorisés à correspondre, respectivement, immédiatement après et immédiatement avant tout saut de ligne dans la chaîne cible, ainsi qu’au tout début et à la toute fin de celle-ci. Cette option correspond au modificateur « /m » dans les expressions régulières Perl.
QRegularExpression::ExtendedPatternSyntaxOption0x0008Tout espace blanc présent dans la chaîne de motif qui n’est pas échappé et qui se trouve en dehors d’une classe de caractères est ignoré. De plus, un dièse (#) non échappé situé en dehors d’une classe de caractères entraîne l’ignorance de tous les caractères suivants, jusqu’au premier retour à la ligne (inclus). Cela permet d’améliorer la lisibilité d’une chaîne de motif et d’insérer des commentaires à l’intérieur d’expressions régulières ; cette fonctionnalité est particulièrement utile lorsque la chaîne de motif est chargée à partir d’un fichier ou saisie par l’utilisateur, car en C++, il est toujours possible d’utiliser les règles relatives aux littéraux de chaîne pour placer des commentaires en dehors de la chaîne de motif. Cette option correspond au modificateur « /x » des expressions régulières Perl.
QRegularExpression::InvertedGreedinessOption0x0010La « gloutonnerie » des quantificateurs est inversée : *, +, ?, {m,n}, etc. deviennent « paresseux », tandis que leurs versions « paresseuses » (*?, +?, ??, {m,n}?, etc.) deviennent « gloutonnes ». Il n’existe pas d’équivalent à cette option dans les expressions régulières Perl.
QRegularExpression::DontCaptureOption0x0020Les groupes de capture non nommés ne capturent pas de sous-chaînes ; les groupes de capture nommés fonctionnent toujours comme prévu, tout comme le groupe de capture implicite numéro 0 correspondant à la correspondance entière. Il n’existe pas d’équivalent à cette option dans les expressions régulières Perl.
QRegularExpression::UseUnicodePropertiesOption0x0040La signification des classes de caractères \w, \d, etc., ainsi que celle de leurs équivalents (\W, \D, etc.), passe de la correspondance avec les caractères ASCII uniquement à la correspondance avec n’importe quel caractère présentant la propriété Unicode correspondante. Par exemple, \d est modifié pour correspondre à tout caractère présentant la propriété Unicode Nd (chiffre décimal) ; \w pour correspondre à tout caractère présentant soit la propriété Unicode L (lettre), soit la propriété N (chiffre), ainsi qu’au trait de soulignement, et ainsi de suite. Cette option correspond au modificateur « /u » dans les expressions régulières Perl.

Le type PatternOptions est une définition de type (typedef) pour QFlags<PatternOption>. Il stocke une combinaison OU de valeurs PatternOption.

[since 6.0] enum QRegularExpression::WildcardConversionOption
flags QRegularExpression::WildcardConversionOptions

L'énumération `WildcardConversionOption` définit des modificateurs de la manière dont un motif glob à caractères génériques est converti en un motif d'expression régulière.

ConstanteValeurDescription
QRegularExpression::DefaultWildcardConversion0x0Aucune option de conversion n’est définie.
QRegularExpression::UnanchoredWildcardConversion0x1La conversion n'ancrera pas le motif. Cela permet des correspondances partielles de chaînes pour les expressions à caractères génériques.
QRegularExpression::NonPathWildcardConversion (since Qt 6.6)0x2La conversion n' interprétera pas le motif comme une expansion de chemin d'accès.

Cette énumération a été introduite dans Qt 6.0.

Le type WildcardConversionOptions est une définition de type (typedef) pour QFlags<WildcardConversionOption>. Il stocke une combinaison « OU » de valeurs WildcardConversionOption.

Voir également QRegularExpression::wildcardToRegularExpression.

Documentation des fonctions membres

QRegularExpression::QRegularExpression()

Crée un objet QRegularExpression avec un motif vide et sans options de motif.

Voir également setPattern() et setPatternOptions().

[explicit] QRegularExpression::QRegularExpression(const QString &pattern, QRegularExpression::PatternOptions options = NoPatternOption)

Crée un objet `QRegularExpression` en utilisant le fichier ` pattern ` fourni comme motif et le fichier ` options ` comme options de motif.

Voir également setPattern() et setPatternOptions().

[noexcept] QRegularExpression::QRegularExpression(const QRegularExpression &re)

Crée un objet QRegularExpression en tant que copie de re.

Voir aussi operator=().

[constexpr noexcept default, since 6.1] QRegularExpression::QRegularExpression(QRegularExpression &&re)

Construit un objet QRegularExpression à partir d're.

Notez qu'un objet QRegularExpression issu d'un déplacement ne peut être que détruit ou affecté. L'effet de l'appel à des fonctions autres que le destructeur ou l'un des opérateurs d'affectation est indéfini.

Cette fonction a été introduite dans Qt 6.1.

Voir aussi operator=().

[noexcept] QRegularExpression::~QRegularExpression()

Supprime l'objet « QRegularExpression ».

[static] QString QRegularExpression::anchoredPattern(QStringView expression)

Renvoie l'expression, encadrée par les ancres \A et \z, qui sera utilisée pour la correspondance exacte.

[static] QString QRegularExpression::anchoredPattern(const QString &expression)

Il s'agit d'une fonction surchargée.

int QRegularExpression::captureCount() const

Renvoie le nombre de groupes de capture présents dans la chaîne de motif, ou -1 si l'expression régulière n'est pas valide.

Remarque : le groupe de capture implicite 0 n' est pas inclus dans le nombre renvoyé.

Voir aussi isValid().

QString QRegularExpression::errorString() const

Renvoie une description textuelle de l'erreur détectée lors de la vérification de la validité de l'expression régulière, ou « aucune erreur » si aucune erreur n'a été détectée.

Voir également isValid() et patternErrorOffset().

[static] QString QRegularExpression::escape(QStringView str)

Échappe tous les caractères de str afin qu'ils n'aient plus aucune signification particulière lorsqu'ils sont utilisés comme chaîne de motif d'expression régulière, puis renvoie la chaîne échappée. Par exemple :

QString escaped = QRegularExpression::escape("a(x) = f(x) + g(x)");
// escaped == "a\\(x\\)\\ \\=\\ f\\(x\\)\\ \\+\\ g\\(x\\)"

C'est très pratique pour construire des motifs à partir de chaînes arbitraires :

QString pattern = "(" + QRegularExpression::escape(name) +
                "|" + QRegularExpression::escape(nickname) + ")";
QRegularExpression re(pattern);

Remarque : cette fonction implémente l’algorithme quotemeta de Perl et échappe avec une barre oblique inversée tous les caractères de str, à l’exception des caractères des plages [A-Z], [a-z] et [0-9], ainsi que du caractère trait de soulignement (_). La seule différence avec Perl est qu’un caractère NUL littéral à l’intérieur de « str » est échappé à l’aide de la séquence « "\\0" » (barre oblique inversée + '0'), au lieu de « "\\\0" » (barre oblique inversée + NUL).

[static] QString QRegularExpression::escape(const QString &str)

Il s'agit d'une fonction surchargée.

[static, since 6.0] QRegularExpression QRegularExpression::fromWildcard(QStringView pattern, Qt::CaseSensitivity cs = Qt::CaseInsensitive, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)

Renvoie une expression régulière correspondant au modèle glob pattern. L'expression régulière sera sensible à la casse si cs vaut Qt::CaseSensitive, et sera convertie conformément à options.

Équivalent à

auto reOptions = cs == Qt::CaseSensitive ? QRegularExpression::NoPatternOption :
                                           QRegularExpression::CaseInsensitiveOption;
return QRegularExpression(wildcardToRegularExpression(str, options), reOptions);

Cette fonction a été introduite dans Qt 6.0.

QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const

Tente d'effectuer une correspondance globale de l'expression régulière avec la chaîne « subject » donnée, en commençant à la position « offset » dans le sujet, en utilisant une correspondance de type « matchType » et en respectant la valeur « matchOptions » fournie.

La chaîne QRegularExpressionMatchIterator renvoyée est positionnée avant le premier résultat de correspondance (le cas échéant).

Voir également QRegularExpressionMatchIterator et global matching.

[since 6.5] QRegularExpressionMatchIterator QRegularExpression::globalMatchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const

Tente d'effectuer une recherche globale de l'expression régulière sur la chaîne de caractères subjectView, en commençant à la position offset dans le texte, en utilisant un type de correspondance matchType et en respectant la valeur matchOptions fournie.

La chaîne QRegularExpressionMatchIterator renvoyée est positionnée avant le premier résultat de correspondance (le cas échéant).

Remarque : les données référencées par subjectView doivent rester valides tant qu’il existe des objets QRegularExpressionMatchIterator ou QRegularExpressionMatch qui les utilisent.

Cette fonction a été introduite dans Qt 6.5.

Voir également QRegularExpressionMatchIterator et global matching.

bool QRegularExpression::isValid() const

Renvoie ` true ` si l'expression régulière est valide (c'est-à-dire si elle ne contient aucune erreur de syntaxe, etc.), ou `false` dans le cas contraire. Utilisez ` errorString()` pour obtenir une description textuelle de l'erreur.

Voir également errorString() et patternErrorOffset().

QRegularExpressionMatch QRegularExpression::match(const QString &subject, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const

Tente de faire correspondre l'expression régulière à la chaîne subject fournie, en commençant à la position offset dans le sujet, en utilisant une correspondance de type matchType et en respectant la valeur matchOptions fournie.

L’objet QRegularExpressionMatch renvoyé contient les résultats de la correspondance.

Voir également QRegularExpressionMatch et normal matching.

[since 6.5] QRegularExpressionMatch QRegularExpression::matchView(QStringView subjectView, qsizetype offset = 0, QRegularExpression::MatchType matchType = NormalMatch, QRegularExpression::MatchOptions matchOptions = NoMatchOption) const

Tente de faire correspondre l'expression régulière à la vue de chaîne « subjectView » donnée, en commençant à la position « offset » à l'intérieur du sujet, en utilisant une correspondance de type « matchType » et en respectant les paramètres « matchOptions » fournis.

L’objet QRegularExpressionMatch renvoyé contient les résultats de la correspondance.

Remarque : les données référencées par subjectView doivent rester valides tant qu’il existe des objets QRegularExpressionMatch qui les utilisent.

Cette fonction a été introduite dans Qt 6.5.

Voir également QRegularExpressionMatch et normal matching.

QStringList QRegularExpression::namedCaptureGroups() const

Renvoie une liste de captureCount() + 1 éléments, contenant les noms des groupes de capture nommés dans la chaîne de motif. La liste est triée de telle sorte que l'élément situé à la position i soit le nom du i-ième groupe de capture, s'il porte un nom, ou une chaîne vide si ce groupe de capture n'est pas nommé.

Par exemple, pour l’expression régulière

    (?<day>\d\d)-(?<month>\d\d)-(?<year>\d\d\d\d) (\w+) (?<name>\w+)

namedCaptureGroups() renverra la liste suivante :

    ("", "day", "month", "year", "", "name")

ce qui correspond au fait que le groupe de capture n° 0 (correspondant à l’ensemble de la correspondance) n’a pas de nom, que le groupe de capture n° 1 porte le nom « day », que le groupe de capture n° 2 porte le nom « month », etc.

Si l’expression régulière n’est pas valide, la fonction renvoie une liste vide.

Voir également isValid(), QRegularExpressionMatch::captured() et QString::isEmpty().

void QRegularExpression::optimize() const

Compile immédiatement le motif, y compris via la compilation JIT (si celle-ci est activée) à des fins d’optimisation.

Voir également isValid() et Debugging Code that Uses QRegularExpression.

QString QRegularExpression::pattern() const

Renvoie la chaîne de caractères correspondant au modèle de l'expression régulière.

Voir également setPattern() et patternOptions().

qsizetype QRegularExpression::patternErrorOffset() const

Renvoie l'offset, dans la chaîne de motif, à l'endroit où une erreur a été détectée lors de la vérification de la validité de l'expression régulière. Si aucune erreur n'a été détectée, la valeur -1 est renvoyée.

Voir également pattern(), isValid() et errorString().

QRegularExpression::PatternOptions QRegularExpression::patternOptions() const

Renvoie les options du motif pour l'expression régulière.

Voir aussi setPatternOptions() et pattern().

void QRegularExpression::setPattern(const QString &pattern)

Définit la chaîne de motif de l'expression régulière sur pattern. Les options de motif restent inchangées.

Voir également pattern() et setPatternOptions().

void QRegularExpression::setPatternOptions(QRegularExpression::PatternOptions options)

Définit l'options on indiquée comme options du motif de l'expression régulière. La chaîne du motif reste inchangée.

Voir également ` patternOptions()` et ` setPattern()`.

[noexcept] void QRegularExpression::swap(QRegularExpression &other)

Remplace cette expression régulière par other. Cette opération est très rapide et ne rencontre jamais d'échec.

[static] QString QRegularExpression::wildcardToRegularExpression(QStringView pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)

Renvoie une représentation sous forme d'expression régulière du glob donné pattern.

Deux transformations sont possibles : l’une ciblant le globbing des chemins d’accès aux fichiers, et l’autre, plus générique.

Par défaut, la transformation cible le globbing des chemins d'accès aux fichiers, ce qui signifie notamment que les séparateurs de chemin font l'objet d'un traitement particulier. Cela implique qu'il ne s'agit pas simplement d'une conversion basique de « * » en « .* » et autres expressions similaires.

QString wildcard = QRegularExpression::wildcardToRegularExpression("*.jpeg");
// Will match files with names like:
//    foo.jpeg
//    f_o_o.jpeg
//    föö.jpeg

La transformation de globbing plus générique est disponible en passant l’ NonPathWildcardConversion dans l’ options de conversion.

Cette implémentation suit de près la définition des caractères génériques pour les motifs glob :

cTout caractère représente lui-même, à l'exception de ceux mentionnés ci-dessous. Ainsi, c correspond au caractère c.
?Correspond à n'importe quel caractère unique, à l'exception d'un séparateur de chemin (si le globbing des chemins de fichiers a été sélectionné). Il équivaut à b{.} dans les expressions régulières complètes.
*Correspond à zéro ou plusieurs caractères quelconques, à l'exception des séparateurs de chemin (si l'expansion des chemins d'accès a été sélectionnée). Cela équivaut à .* dans les expressions régulières complètes.
[abc]Correspond à un caractère figurant entre crochets.
[a-c]Correspond à un caractère parmi ceux indiqués entre crochets.
[!abc]Correspond à un caractère qui ne figure pas entre crochets. Cela revient à [^abc] en expression régulière complète.
[!a-c]Correspond à un caractère qui ne fait pas partie de la plage indiquée entre crochets. Cela équivaut à [^a-c] dans une expression régulière complète.

Remarque : pour des raisons historiques, le caractère « barre oblique inversée » (\) n' est pas un caractère d'échappement dans ce contexte. Pour faire correspondre l'un des caractères spéciaux, placez-le entre crochets (par exemple, [?]).

Pour plus d'informations sur l'implémentation, consultez :

Par défaut, l’expression régulière renvoyée est entièrement ancrée. En d’autres termes, il n’est pas nécessaire d’appeler à nouveau la fonction anchoredPattern() sur le résultat. Pour obtenir une expression régulière non ancrée, passez l’argument UnanchoredWildcardConversion dans l’ options de conversion.

Voir également escape().

[static] QString QRegularExpression::wildcardToRegularExpression(const QString &pattern, QRegularExpression::WildcardConversionOptions options = DefaultWildcardConversion)

Il s'agit d'une fonction surchargée.

[noexcept] QRegularExpression &QRegularExpression::operator=(QRegularExpression &&re)

La fonction `move` attribue l're d'expression régulière à cet objet et renvoie une référence au résultat. Le motif et les options associées au motif sont tous deux copiés.

Notez qu'une QRegularExpression déplacée ne peut être que détruite ou affectée. L'effet de l'appel à des fonctions autres que le destructeur ou l'un des opérateurs d'affectation est indéfini.

[noexcept] QRegularExpression &QRegularExpression::operator=(const QRegularExpression &re)

Attribue l'expression régulière re à cet objet et renvoie une référence à la copie. Le motif et ses options sont tous deux copiés.

Éléments non membres associés

[noexcept] size_t qHash(const QRegularExpression &key, size_t seed = 0)

Renvoie la valeur de hachage de key, en utilisant seed comme graine pour le calcul.

[noexcept] bool operator!=(const QRegularExpression &lhs, const QRegularExpression &rhs)

Renvoie « true » si l'expression régulière « lhs » est différente de « rhs », ou « false » dans le cas contraire.

Voir aussi operator==().

QDataStream &operator<<(QDataStream &out, const QRegularExpression &re)

Écrit l'expression régulière re dans le flux out.

Voir également «Sérialisation des types de données Qt ».

QDebug operator<<(QDebug debug, QRegularExpression::PatternOptions patternOptions)

Enregistre les options de modèle patternOptions dans l'objet de débogage debug à des fins de débogage.

Voir également Techniques de débogage.

QDebug operator<<(QDebug debug, const QRegularExpression &re)

Écrit l'expression régulière re dans l'objet de débogage debug à des fins de débogage.

Voir également Techniques de débogage.

[noexcept] bool operator==(const QRegularExpression &lhs, const QRegularExpression &rhs)

Renvoie « true » si l'expression régulière « lhs » est égale à « rhs », ou « false » dans le cas contraire. Deux objets « QRegularExpression » sont égaux s'ils possèdent la même chaîne de motif et les mêmes options de motif.

Voir également operator!=().

QDataStream &operator>>(QDataStream &in, QRegularExpression &re)

Lit une expression régulière à partir du flux in et l'enregistre dans re.

Voir également Sérialisation des types de données Qt.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.