Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
S’applique à : SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Base 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_expressionssont pris en charge dans les fonctions intrinsèques suivantes :REGEXP_LIKEREGEXP_COUNTREGEXP_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_REPLACEREGEXP_SUBSTRREGEXP_MATCHESREGEXP_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.