REGEXP_LIKE Oracle : filtrer avec des expressions régulières

REGEXP_LIKE Oracle : filtrer avec des expressions régulières (valider un e-mail, détecter le non-numérique…). Syntaxe, options, regex utiles et exemples.

Illustration : REGEXP_LIKE Oracle

REGEXP_LIKE en Oracle permet de filtrer des données avec des expressions régulières — une recherche de motif bien plus puissante que l’opérateur LIKE. Valider un e-mail, trouver les codes au mauvais format, détecter des caractères non numériques : voici comment utiliser REGEXP_LIKE avec des exemples concrets.

Publicité

Syntaxe

SELECT * FROM clients
WHERE REGEXP_LIKE(colonne, motif [, options]);

Renvoie les lignes où colonne correspond au motif (expression régulière).

REGEXP_LIKE vs LIKE

LIKEREGEXP_LIKE
Jokers% et _regex complète
Puissancebasiqueélevée (classes, quantificateurs, alternatives)
ExempleLIKE 'A%'REGEXP_LIKE(c,'^[A-C]')

Pour les recherches simples, gardez LIKE ; pour les motifs complexes, REGEXP_LIKE.

Exemples concrets

Valider un format d’e-mail

SELECT email FROM clients
WHERE NOT REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');
-- renvoie les e-mails MAL formés

Trouver les valeurs non numériques

SELECT code FROM articles
WHERE NOT REGEXP_LIKE(code, '^[0-9]+$');

Recherche insensible à la casse

SELECT * FROM clients
WHERE REGEXP_LIKE(nom, 'dupont', 'i');   -- 'i' = ignore la casse

Plusieurs valeurs possibles (alternative)

SELECT * FROM tickets
WHERE REGEXP_LIKE(statut, '^(ouvert|en_cours|resolu)$');

Les briques d’expression régulière utiles

  • ^ début, $ fin de chaîne
  • [0-9] un chiffre, [A-Za-z] une lettre, [[:digit:]] classe POSIX
  • + 1 ou plus, * 0 ou plus, ? 0 ou 1, {2,4} entre 2 et 4
  • . n’importe quel caractère, \d un chiffre (selon le moteur)
  • | alternative (ou), ( ) groupe

Les options (3ᵉ paramètre)

  • 'i' : insensible à la casse
  • 'c' : sensible à la casse (défaut)
  • 'm' : mode multi-ligne
  • 'x' : ignore les espaces du motif

La famille REGEXP d’Oracle

  • REGEXP_LIKE : tester (cette page).
  • REGEXP_REPLACE : remplacer selon un motif.
  • REGEXP_SUBSTR : extraire la partie qui correspond.
  • REGEXP_INSTR / REGEXP_COUNT : position / nombre d’occurrences.

FAQ

REGEXP_LIKE est-il plus lent que LIKE ?

Oui, légèrement : les expressions régulières coûtent plus cher. Pour un simple préfixe, gardez LIKE (qui peut aussi utiliser un index).

Peut-on indexer une recherche REGEXP ?

Pas directement avec un index B-tree classique. Pour de gros volumes, envisagez un index basé sur une fonction ou Oracle Text.

Comment valider un numéro de téléphone français ?

Par exemple : REGEXP_LIKE(tel, '^0[1-9]([ .-]?[0-9]{2}){4}$'), à adapter à votre format.

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Cours SQL & Oracle — 100% gratuitVoir les cours →