Exemples Oracle REGEXP_LIKE
Les expressions régulières sont des modèles utilisés pour faire correspondre les combinaisons de caractères dans les chaînes. Oracle 10g a introduit la prise en charge des expressions régulières utilisant différentes fonctions. Cet article se concentre sur la fonction Oracle REGEXP_LIKE et explique comment l’utiliser.
Description
l’Oracle REGEXP_LIKE est utilisé pour effectuer une correspondance d’expression régulière (plutôt qu’une simple correspondance de motif effectuée par LIKE).
syntaxe
REGEXP_LIKE ( string expression, pattern )
- expression de chaîne – l’expression de chaîne.
- pattern – le paramètre de correspondance de motif d’expression régulière
- match – vous permet de modifier le comportement de correspondance par défaut de la fonction Oracle REGEXP_LIKE (par exemple, changez la recherche de sensible à la casse à insensible à la casse).
Exemples de base Oracle REGEXP_LIKE
Nous allons commencer par créer une table appelée Names, en fonction de ses valeurs, les exemples Oracle REGEXP_LIKE suivants effectueront différentes recherches d’expressions régulières.
CREATE TABLE namesASSELECT last_name AS NAMEFROM hr.employeesORDER BY salary ;
L’exemple Oracle REGEXP_LIKE suivant récupérerait tous les noms contenant la lettre ‘z’. Cette instruction Oracle SELECT ne met en fait aucune limite inférieure ou supérieure au nombre de lettres avant ou après la lettre ‘z’ (un nombre quelconque de caractères est autorisé), mais nécessite que le mot contienne la lettre ‘z’.
SELECT *FROM namesWHERE regexp_like (name , 'z') ;NAME-------------------------LorentzGietzOzer
L’exemple suivant Oracle REGEXP_LIKE récupérerait tous les noms contenant la séquence de lettres ‘be’. Encore une fois, cette instruction Oracle SELECT n’impose aucune limite inférieure ou supérieure au nombre de lettres avant ou après la séquence de lettres « be » (un nombre quelconque de caractères est autorisé), mais nécessite que le mot contienne la séquence de lettres « be ».
SELECT *FROM namesWHERE regexp_like (name , 'be') ;NAME---------------------------AbelGreenberg
utilisation de l’opérateur pipe(/)
L’opérateur Pipe(/) est utilisé pour spécifier d’autres correspondances. Dans le prochain exemple Oracle REGEXP_LIKE, nous utiliserions l’opérateur de tuyau (|) afin de récupérer tous les noms qui contiennent la séquence de lettres ‘be’ ou ‘ae’. Cette instruction Oracle SELECT n’impose en fait aucune limite inférieure ou supérieure au nombre de lettres avant ou après la séquence de lettres « be » ou « ae » (un nombre quelconque de caractères est autorisé), mais nécessite que le mot contienne ces séquences.
SELECT *FROM namesWHERE regexp_like (name , 'be|ae') ;NAME-------------------------BaerAbelRaphaelyGreenberg
En spécifiant la lettre ‘c’ (comme troisième argument de la fonction REGEXP_LIKE), nous pouvons effectuer une recherche sensible à la casse (la valeur par défaut dans Oracle).
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'c' ) ;NAME-------------------------BaerAbelRaphaelyGreenberg
Et en spécifiant la lettre ‘i’ (comme troisième argument de la fonction REGEXP_LIKE), nous pouvons effectuer une recherche insensible à la casse.
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'i' ) ;NAME-------------------------BellBernsteinBaerAbelRaphaelyGreenberg
En utilisant l’opérateur Caret(^)
Nous pouvons utiliser l’opérateur caret(^) pour indiquer un caractère de début de ligne, dans cet exemple de type REGEXP_LIKE, nous récupérerions tous les noms commençant par la séquence de lettres ‘be’ ou ‘ba’ (recherche insensible à la casse)
SELECT *FROM namesWHERE regexp_like (name , '^be|^ba' , 'i' ) ;NAME-------------------------BaidaBellBandaBatesBernsteinBaer
En utilisant l’opérateur Dollar($)
Nous pouvons utiliser l’opérateur dollar(er) pour indiquer un caractère de fin de ligne, dans cet exemple de type REGEXP_LIKE, nous récupérerions tous les noms qui se terminent par la séquence de lettres ‘es’ ou ‘er’ (recherche insensible à la casse).
SELECT *FROM namesWHERE regexp_like (name , 'es$|er$' , 'i' ) ;NAME-------------------------PhiltankerColmenaresJonesGatesDaviesNayerStilesDellingerBatesBaer
En utilisant des crochets
Nous pouvons utiliser les crochets pour spécifier une liste de correspondance qui doit correspondre à l’une des expressions qui y sont représentées. L’exemple suivant Oracle REGEXP_LIKE récupérerait tous les noms contenant les lettres ‘j’ ou ‘z’.
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------RajsLorentzGietzOzerErrazuriz
Cet exemple de REGEXP_LIKE récupérerait tous les noms contenant les lettres ‘b’ ou ‘z’ ou ‘E’ (recherche sensible à la casse)
SELECT * FROM names WHERE regexp_like (name , '') ;NAME-------------------------TobiasCabrioEverettLorentzPataballaErnstCambraultGietzMcEwenCambrault
Ensuite, nous modifierons notre dernière requête et en ferons une recherche insensible à la casse :
SELECT *FROM namesWHERE regexp_like (name , '' , 'i') ;NAME-------------------------PhiltankerZacharyMarkleGeePerkinsColmenaresPatelOConnellMikkilineniTobiasSeo
Cet exemple Oracle REGEXP_LIKE récupérerait tous les noms contenant les lettres ‘a’, ‘b’ ou ‘c’:
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
Et au lieu de spécifier les lettres ‘a’, ‘b’ et ‘c’ séparément, nous pouvons spécifier une plage:
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
L’exemple suivant d’Oracle REGEP_LIKE récupérerait tous les noms contenant une lettre comprise entre ‘d’ et ‘g’, suivie de la lettre ‘a’.
SELECT *FROM namesWHERE regexp_like (name , 'a') ;NAME-------------------------VargasBaidaFleaurBanda
En utilisant le point (.) Opérateur
La période (.) l’opérateur correspond à n’importe quel caractère sauf NULL, l’exemple suivant Oracle REGEXP_LIKE récupérerait tous les noms contenant une lettre comprise entre ‘b’ et ‘g’, suivie de n’importe quel caractère, suivi de la lettre ‘a’.
SELECT *FROM namesWHERE regexp_like (name , '.') ;NAME-------------------------ColmenaresTobiasMcCainSarchandSewallCambraultSciarraCambrault
Nous pouvons utiliser l’opérateur de point pour représenter plus d’un caractère, l’exemple suivant Oracle REGEXP_LIKE récupérerait tous les noms contenant une lettre comprise entre ‘b’ et ‘g’, suivie de deux caractères quelconques, suivie de la lettre ‘a’.
SELECT *FROM namesWHERE regexp_like (name , '..') ;NAME-------------------------De HaanKochhar
Utilisation des accolades
Les accolades sont utilisées pour spécifier un nombre exact d’occurrences, par exemple pour afficher tous les noms contenant des doubles lettres « o ».
SELECT *FROM namesWHERE regexp_like (name , '{2}') ;NAME-------------------------KhooBloom