Vous êtes sur la page 1sur 18

L'opérateur

LIKE
EXPRESSION RÉGULIÈRE

Une expression régulière est une chaine de


caractères qui décrit un motif présent dans un texte.
La syntaxe utilisée pour définir une expression
régulière a, pendant longtemps, subi des
modifications avant d’être normalisée via le standard
POSIX.
LIKE

L'opérateur logique LIKE est un opérateur d'égalité


strictement réservé aux chaines de type texte.
 Sa particularité est de pouvoir comparer des valeurs
à un masque composé de caractères de substitution.
Syntaxe LIKE

•D'un coté nous avons la valeur à comparer et de l'autre le masque.


•La syntaxe est identique en SQL, VBA ou dans les expressions.

•La négation se fait grâce à NOT.


REGEXP_LIKE

REGEXP_LIKE est à la fois un prédicat, utilisé dans une


clause WHERE d’une requête SQL, et une fonction
PL/SQL. Elle permet de rechercher si un motif donné
existe.
REGEXP_LIKE (source, motif
[, match_parameter])
Voyons de plus près les divers paramètres :
source est le texte dans lequel nous souhaitons rechercher
notre motif.
motif est l’expression régulière qui décrit ce que nous
recherchons, il aura une taille maximum de 512 octets.
Motif

Le plus simple des motifs est la chaine de caractères


exacte que nous souhaitons rechercher, comme une
chaine qui suit une clause WHERE dans une requête
SQL :
SELECT *
FROM ETUDIANT
WHERE NOMETUDIANT= '‘MOUNTACER”;
MOUNTACER n’est pas un motif extrêmement utile, car
il ne contient que des caractères connus; or ce qui fait la
force d’un motif, c’est l’utilisation de méta-caractères qui
permet à ce motif d’être beaucoup plus général.
Le standard SQL fournit depuis longtemps un système basique de
recherche de motifs via LIKE. Voici un exemple dans lequel la
requête SQL retourne tous les noms de laboratoire contenant le mot
Paris en fin de nom :
SELECT NOMETUDIANT
FROM ETUDIANT
WHERE NOMETUDIANT LIKE '%MOUNTACER';
Le caractère pourcent (%) dans le motif spécifie que nous acceptons
un certains nombre de caractères à gauche de la chaine
‘MOUNTACER’. Un certain nombre de caractères signifie qu’il peut
y en avoir zéro, un ou plusieurs.
Mais LIKE est un prédicat bien limité, ce dernier ne supportant que
deux méta-caractères. En effet, le travail de tous les jours, nécessite
des motifs bien plus complexes, que LIKE ne peut pas traiter, c’est
pour cela que les expressions régulières sont là.
EXPRESSIONS RÉGULIÈRES

SELECT NOMETUDIANT
FROM ETUDIANT
WHERE REGEXP_LIKE(NOM ETUDIANT, ‘MOUNTACER');
REGEXP_LIKE est le nouveau prédicat introduit dans ORACLE
10g qui permet, dans notre cas, de chercher dans la colonne
labs_name si elle contient le motif ‘MOUNTACER’. Ce prédicat
est donc similaire à LIKE, sauf que contrairement à ce dernier où
le motif doit correspondre à l’intégralité des données contenues
dans la colonne, REGEXP_LIKE recherche si une partie
seulement des données, correspond au motif.
Mais notre motif de recherche dans cet exemple, ne présente pas
la puissance des expressions régulières, étant donné qu’il n’utilise
aucun méta-caractère
META-CARACTÈRES

Voici un exemple qui montre comment vérifier si la


colonne description contient des numéros de téléphone
au format US ou Canadien :
SELECT TELEPHONE, REGEXP_LIKE(description,
'([[:digit:]]{3}[-.]|\([[:digit:]]{3}\) )'||'[[:digit:]]{3}[-.]
[[:digit:]]{4}')
FROM ETUDIANT;
Cette expression régulière fait appel à un grand nombre
des méta-caractères disponibles, mais plutôt que
d’expliquer cette regex, voyons plutôt les méta-
caractères
META-CARACTÈRES

Méta-Caractères Basiques 

. (point) : n’importe quel caractère excepté celui de retour à la


ligne.
\ (antislash) : permet de donner à un méta-caractère sa
signification de base
exemple :
 \$ pour chercher le caractère $ dans un motif.
META-CARACTÈRES

Méta-Caractères de Groupage ou d’Alternative


| : correspond à l’opérateur de choix , il permet de spécifier une
alternative à un groupe (généralement).
Exemple :
 (a|b) <=> a ou b mais pas les deux
( ) : permet de créer une sous-expression ou sous-groupe, nécessaire
pour les proposer des alternatives ou des “backreferences”
Exemple :
 ([A|C] [:alpha:]*)|( [ :digit :]{2}[ :alpha :]*) <=> toute chaine de caractères
commençant par A ou C et suivie de lettres ou 2 chiffres suivis de lettres.
[char] : définit une liste de caractères
Exemple :
 "[bs]ac" peut correspondre à bac ou sac
META-CARACTÈRES

Méta-Caractères d’Ancres :
^ : caractère de début de ligne
$ : caractère de fin de ligne
META-CARACTÈRES

Meta-Caractères de Quantification
*  : correspond à 0 ou plusieurs fois
? : correspond à 0 ou 1 fois
+ : correspond à1 ou plusieurs fois
{m} : correspond à exactement m fois
{m,} : correspond à au moins m fois
{m, n} : correspond au moins m fois mais sans
excéder n fois
META-CARACTÈRES

Meta-Caractères Spéciaux
[=char=] : est la classe d’équivalence,
particulièrement utile pour rechercher par exemple
un e et toutes ses variantes accentuées. Ainsi [=e=]
permet de rechercher sur les caractères eéëèÉËÈE
[.char.] : est la classe d’éléments assemblés. En effet,
un ensemble de caractères ne peut correspondre qu’à
une seule lettre dans certaines langues
META-CARACTÈRES

Méta-Caractères POSIX
[:alnum:] : caractères alphanumériques
[:alpha:]  : caractères alphabétiques
[:blank:]  : caractère d’espace blanc
[:cntrl:] : caractères non-affichables
[:digit:] : chiffre
[:graph:] : tous les caractères de [:punct:], [:upper:], [:lower:] et [:digit:].
[:lower:] : caractères alphabétiques en minuscule
[:print:] : tous les caractères imprimables
[:punct:] : tous les caractères de ponctuations
[:space:] : tous les caractères d’espacement non imprimables
[:upper:] :caractères alphabétiques en majuscule
[:xdigit:] : caractères hexadécimaux
REGEXP_LIKE

Le prédicat REGEXP_LIKE peut être aussi bien


utilisé dans une clause WHERE que dans une
contrainte CHECK ou dans un INDEX, par exemple :
ALTER TABLE members
ADD (CONSTRAINT phone_number_format
CHECK (REGEXP_LIKE(members_phone,
'^\([0-9]{3}\) [0-9]{3}-[0-9]{4}$')));
FIN
BACKREFERENCES

BackReferences ou Références Arrières est une


notion gérée par Oracle qui peut s’avérer très utile,
lors d’un remplacement par exemple. Une
backreference est une référence numérotée de la
forme \1 à \9 qui correspond au texte satisfaisant un
précédent sous-groupe.

Vous aimerez peut-être aussi