Accéder au contenu principal
Documents
Gestion des tableaux et des schémasSyntaxe de baseDéclencheursBases de donnéesFonctions de la dateFonctions des chaînes de caractèresFonctions mathématiquesFonctions JSONIndexes

REGEXP_MATCHES PostgreSQL

La fonction REGEXP_MATCHES de PostgreSQL est utilisée pour rechercher un motif dans une chaîne de caractères à l'aide d'expressions régulières et retourner toutes les occurrences des correspondances. Elle est particulièrement utile pour extraire les sous-chaînes qui correspondent à un motif donné.

Utilisation

La fonction REGEXP_MATCHES est utilisée lorsque vous devez rechercher et extraire d'une chaîne de caractères des sous-chaînes correspondant à un motif d'expression régulière spécifié. Il renvoie un ensemble de tableaux de texte, où chaque tableau contient les sous-chaînes correspondant aux groupes du motif. Si le motif correspond mais n'a pas de groupes de capture, il renvoie un tableau vide.

SELECT REGEXP_MATCHES(source_string, pattern [, flags]);
  • source_string: La chaîne de caractères à rechercher.
  • pattern: L'expression régulière à comparer à la chaîne source.
  • flags: Optional. Modificateurs comme "i" pour la sensibilité à la casse. S'il est omis, le comportement par défaut est la correspondance entre les majuscules et les minuscules.

Exemples

1. Correspondance de motifs de base

SELECT REGEXP_MATCHES('abc123', '\d+');

Cette requête recherche un ou plusieurs chiffres dans la chaîne 'abc123' et renvoie {"123"}.

2. Correspondance insensible à la casse

SELECT REGEXP_MATCHES('PostgreSQL', 'postgresql', 'i');

Ici, le motif 'postgresql' est comparé insensiblement à la chaîne de caractères 'PostgreSQL', ce qui renvoie {"PostgreSQL"}.

3. Extraction de plusieurs groupes

SELECT REGEXP_MATCHES('User: John, Age: 30', 'User: (\w+), Age: (\d+)');

Dans cet exemple, la fonction extrait le nom de l'utilisateur et l'âge de la chaîne et renvoie {"John", "30"} comme groupe correspondant.

4. Utilisation de LATERAL dans une requête complexe

SELECT user_data.username, match
FROM users as user_data,
LATERAL REGEXP_MATCHES(user_data.details, 'User: (\w+), Age: (\d+)') AS match;

Cet exemple illustre l'utilisation de REGEXP_MATCHES dans une clause FROM avec LATERAL, pour extraire et afficher les détails d'un utilisateur à partir d'un tableau.

Conseils et bonnes pratiques

  • Comprenez les limites du drapeau. Notez que le drapeau 'g' pour la correspondance globale n'est pas pris en charge par REGEXP_MATCHES.
  • Capturez des parties spécifiques. Utilisez les parenthèses dans les modèles pour capturer des parties spécifiques de la chaîne correspondante afin d'obtenir des résultats détaillés.
  • Considérations sur le type de retour. REGEXP_MATCHES renvoie un ensemble de tableaux de texte, ce qui peut nécessiter un traitement supplémentaire dans votre logique d'interrogation.
  • Sélection de la fonction. Comparez avec des fonctions similaires telles que REGEXP_REPLACE, REGEXP_SPLIT_TO_TABLE, et REGEXP_SPLIT_TO_ARRAY pour choisir celle qui convient le mieux à vos besoins.