Partager via


Expressions régulières

S’applique à : SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Cet article présente des expressions régulières pour SQL Server.

Une expression régulière, ou regex, est une séquence de caractères qui définit un modèle de recherche pour le texte. Regex est couramment utilisé pour diverses tâches, notamment la mise en correspondance de modèles, la validation des données, la transformation des données et l’interrogation. Il offre un moyen flexible et efficace de rechercher, manipuler et gérer des opérations de données complexes.

Remarque

Les expressions régulières sont disponibles dans Azure SQL Managed Instance avec la stratégie de mise à joursql Server 2025 ou Always-up-to-date.

Cette implémentation d’expression régulière est basée sur la bibliothèque d’expressions régulières RE2. Pour plus d’informations, consultez la syntaxe d’expression régulière RE2.

Fonctions regex prises en charge :

Fonction Descriptif
REGEXP_LIKE Renvoie une valeur booléenne indiquant si l’entrée texte correspond au modèle regex.
REGEXP_REPLACE Renvoie une chaîne source modifiée, remplacée par une chaîne de remplacement, lorsque l’occurrence du modèle regex est trouvée.
REGEXP_SUBSTR Extrait des parties d’une chaîne en fonction d’un modèle d’expression régulière.

Renvoie la Nième occurrence d’une sous-chaîne correspondant au modèle regex.
REGEXP_INSTR Renvoie la position de début ou de fin de la sous-chaîne correspondante, selon l’option fournie.
REGEXP_COUNT Renvoie un nombre correspondant au nombre de fois où le modèle regex apparaît dans une chaîne.
REGEXP_MATCHES Renvoie une table des sous-chaînes capturées qui correspondent à un modèle d’expression régulière dans une chaîne. Si aucune correspondance n’est trouvée, la fonction ne renvoie aucune ligne.
REGEXP_SPLIT_TO_TABLE Renvoie une table de chaînes scindées, délimitées par le modèle regex. S’il n’y a aucune correspondance avec le modèle, la fonction renvoie la chaîne.

Les expressions régulières peuvent être composées de caractères littéraux et de métacharacteurs, qui ont des significations et des fonctions spéciales.

Une expression régulière de base est un caractère littéral unique. Les caractères correspondent eux-mêmes, à l’exception des métacharacters. Les métacharacteurs incluent *, , +?, (, ), ou |. Pour faire correspondre un métacharacteur, échappez-le avec une barre oblique inverse. Par exemple, \* correspond au caractère astérisque littéral (*).

Deux expressions régulières peuvent être modifiées ou concaténées pour former une nouvelle expression régulière : si e1 correspond à s et e2 correspond à t, e1 | e2 correspond à s ou t, et e1e2 correspond à st.

Les métacharacteurs *, +et ? sont des opérateurs de répétition : e1* correspond à une séquence de zéro ou plusieurs chaînes (éventuellement différentes), chacune d’entre elles correspondant à e1 ; e1 + correspond à une ou plusieurs ; e1? correspond à zéro ou un.

La priorité de l’opérateur, de la plus faible à la liaison la plus forte, est la suivante : - Alternation - Concaténation - Opérateurs de répétition

Les parenthèses explicites peuvent être utilisées pour forcer différentes significations, comme dans les expressions arithmétiques. Voici quelques exemples : ab|cd équivaut à (ab)|(cd) ; ab équivaut à a(b).

Pour plus d’informations sur la syntaxe d’expression régulière acceptée par RE2, consultez
Syntaxe d’expression régulière RE2. Cette page répertorie également une syntaxe acceptée par PCRE, Perl et Vim.

Caractères d’expression régulière acceptés

Expressions à un seul caractère

Types d’expressions à caractère unique Exemples
n’importe quel caractère, y compris éventuellement un caractère de nouvelle ligne (s=vrai) .
classe de caractères [xyz]
classe de caractères exclue [^xyz]
Classes de caractères perl \d
classe de caractères Perl exclue \D
Classes de caractères ASCII [[:alpha:]]
classe de caractères ASCII exclue [[:^alpha:]]
classe de caractères Unicode (nom d’une lettre) \pN
classe de caractères Unicode \p{Greek}
classe de caractères Unicode exclue (nom d’une lettre) \PN
classe de caractères Unicode exclue \P{Greek}
Composites Descriptif
xy x suivi de y
x | y x ou y (préférer x)
Répétitions Descriptif
x* zéro ou plus x, préférez plus
x+ un ou plusieurs x, préférez plus
x? zéro ou un x, préférez-en un
x{n,m} n ou n+1 ou ... ou m x, préférez plus
x{n,} n ou plus x, préférez plus
x{n} exactement n x
x*? zéro ou plus x, préférez moins
x+? un ou plusieurs x, préférez moins
x?? zéro ou un x, préférez zéro
x{n,m}? n ou n+1 ou ... ou m x, préférez moins
x{n,}? n ou plus x, préférez moins
x{n}? exactement n x

Remarque

Les formulaires x{n,m}de comptage , x{n,}et x{n} rejeter les formulaires qui créent un nombre minimal ou maximal de répétitions supérieures à 1 000. Les répétitions illimitées ne sont pas soumises à cette restriction.

Classes de caractères perl

Le tableau suivant répertorie les classes de caractères Perl actuellement prises en charge.

Classes de caractères Perl (ASCII uniquement) Descriptif
\d chiffres ( [0-9])
\D pas de chiffres ( [^0-9])
\s espace blanc ( [\t\n\f\r ])
\S pas d’espace blanc ( [^\t\n\f\r ])
\w caractères de mot ( [0-9A-Za-z_])
\W caractères qui ne sont pas des caractères de mot ( [^0-9A-Za-z_])

Classes de caractères ASCII

Le tableau suivant répertorie les classes de caractères ASCII actuellement prises en charge.

Classes de caractères ASCII Descriptif
[[:alnum:]] alphanumérique ( [0-9A-Za-z])
[[:alpha:]] alphabétique ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] vide ( [\t ])
[[:cntrl:]] contrôle ( [\x00-\x1F\x7F])
[[:digit:]] chiffres ( [0-9])
[[:graph:]] graphique ( [!-~] ou [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] minuscules ( [a-z])
[[:print:]] imprimable ( [ -~] ou [ [:graph:]])
[[:punct:]] ponctuation ( [!-/:-@[-\``{-~])
[[:space:]] espace blanc ( [\t\n\v\f\r ])
[[:upper:]] majuscules ( [A-Z])
[[:word:]] caractères de mot ( [0-9A-Za-z_])
[[:xdigit:]] chiffre hexadécimal ( [0-9A-Fa-f])

Caractères littéraux

  • Lettres
  • Numéros
  • Symboles

Chaînes vides

Chaînes vides Descriptif
^ Au début du texte ou de la ligne (m=true)
$ À la fin du texte (comme \z, non \Z) ou ligne (m=true)
\A Au début du texte
\b À la limite du mot ASCII (\w d’un côté et \W, \Aou \z de l’autre)
\B Pas à la limite du mot ASCII
\z À la fin du texte

Groupements

Groupe de capture (sous-expression) du modèle avec :

Grouping Descriptif
(re) Groupe de capture numéroté (sous-correspondance)
(?P<name>re) Groupe de capture nommé et numéroté (sous-correspondance)
(?:re) Groupe de non-capture
(?<flags>) Définir <flags> dans le groupe actuel ; non capture
(?<flags>:re) Définir <flags> pendant re; regroupement non capturé

Drapeaux

Utilisez des indicateurs pour modifier le comportement de l’expression. Par exemple:

Drapeau Descriptif
i Respect de la casse (valeur par défaut false)
m Mode multiligne : ^ et $ mettre en correspondance la ligne de début/fin en plus du texte de début/fin (valeur par défaut false)
s Laisser . correspondre \n (valeur par défaut false)
c Respect de la casse (valeur par défaut true)

Cette implémentation prend en charge la norme POSIX des expressions régulières suivant RE2 et prend en charge la version PCRE/PCRE2 de la syntaxe des expressions régulières, qui est compatible avec la plupart des moteurs et outils d’expression régulière modernes. Il existe différentes versions d’expressions régulières, telles que POSIX, ANSI, Perl et PCRE, qui ont différentes syntaxes et fonctionnalités. Pour plus d’informations sur les constructions et le comportement pris en charge du moteur regex sous-jacent, consultez RE2, une bibliothèque d’expressions régulières.

Remarque

La correspondance d’expression régulière dans SQL Server n’honore pas les classements SQL pour les comparaisons linguistiques. Ce comportement est par conception et cohérent avec la plupart des moteurs d’expression régulière, car la correspondance est basée sur le modèle et les propriétés de caractères Unicode plutôt que sur les règles de classement. Par conséquent, il peut entraîner des différences de comportement par rapport à d’autres fonctions de comparaison de chaînes comme LIKE, en particulier sur les colonnes indexées avec des classements spécifiques au langage.

Spécifications

  • Outil client SQL, tel qu’Azure Data Studio, SQL Server Management Studio ou Visual Studio Code.
  • Connaissance de base de la syntaxe et des requêtes SQL.
  • Compréhension de base de la syntaxe et des concepts d’expression régulière.

Questions fréquentes (FAQ)

Quel est l’impact sur les performances de l’utilisation de regex ?

Les requêtes regex peuvent avoir un impact sur les performances en fonction de la complexité du modèle regex, de la taille des données de texte et du nombre de lignes impliquées. Vous pouvez utiliser le plan d’exécution et les statistiques pour surveiller et optimiser les performances de vos requêtes regex.

Limites

Les éléments suivants ne sont actuellement pas pris en charge :

  • Les types de données métier (varchar(max) ou nvarchar(max)) string_expressions sont pris en charge dans les fonctions intrinsèques suivantes :
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

Toutefois, cette prise en charge est limitée aux tailles d’entrée jusqu’à 2 Mo.

  • Les types de données LOB ne sont pas pris en charge dans les fonctions regex suivantes :

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • Les fonctions d’expression régulière ne sont pas prises en charge dans les procédures stockées compilées en mode natif.