Oracle REGEXP_LIKE Examples
Le espressioni regolari sono modelli utilizzati per abbinare combinazioni di caratteri in stringhe. Oracle 10g ha introdotto il supporto per le espressioni regolari utilizzando diverse funzioni. Questo post si concentra sulla funzione Oracle REGEXP_LIKE e spiega come usarlo.
Descrizione
Oracle REGEXP_LIKE viene utilizzato per eseguire una corrispondenza di espressioni regolari (piuttosto che una semplice corrispondenza di pattern eseguita da LIKE).
sintassi
REGEXP_LIKE ( string expression, pattern )
- string expression – l’espressione della stringa.
- pattern – il parametro corrispondenza espressione regolare
- match-consente di modificare il comportamento di corrispondenza predefinito della funzione Oracle REGEXP_LIKE (ad esempio, modificare la ricerca da case sensitive a case insensitive).
Esempi di base di Oracle REGEXP_LIKE
Inizieremo creando una tabella chiamata Names, in base ai suoi valori, i seguenti esempi di Oracle REGEXP_LIKE eseguiranno diverse ricerche di espressioni regolari.
CREATE TABLE namesASSELECT last_name AS NAMEFROM hr.employeesORDER BY salary ;
Il seguente esempio Oracle REGEXP_LIKE recupererebbe tutti i nomi che contengono la lettera ‘z’. Questa istruzione Oracle SELECT in realtà non pone limiti inferiori o superiori al numero di lettere prima o dopo la lettera ‘z’ (è consentito un numero qualsiasi di caratteri), ma richiede che la parola contenga la lettera ‘z’.
SELECT *FROM namesWHERE regexp_like (name , 'z') ;NAME-------------------------LorentzGietzOzer
Il prossimo esempio Oracle REGEXP_LIKE recupererebbe tutti i nomi che contengono la sequenza di lettere ‘be’. Ancora una volta, questa istruzione Oracle SELECT non pone alcun limite inferiore o superiore al numero di lettere prima o dopo la sequenza di lettere ‘be’ (è consentito un numero qualsiasi di caratteri), ma richiede che la parola contenga la sequenza di lettere ‘be’.
SELECT *FROM namesWHERE regexp_like (name , 'be') ;NAME---------------------------AbelGreenberg
utilizzo dell’operatore pipe (/)
L’operatore Pipe ( / ) viene utilizzato per specificare corrispondenze alternative. Nel prossimo esempio Oracle REGEXP_LIKE useremo l’operatore pipe ( / ) per recuperare tutti i nomi che contengono la sequenza di lettere ‘be’ o ‘ae’. Questa istruzione Oracle SELECT in realtà non pone limiti inferiori o superiori al numero di lettere prima o dopo la sequenza di lettere ‘be’ o ‘ae'(è consentito un numero qualsiasi di caratteri), ma richiede che la parola contenga queste sequenze.
SELECT *FROM namesWHERE regexp_like (name , 'be|ae') ;NAME-------------------------BaerAbelRaphaelyGreenberg
Specificando la lettera ‘c’ (come terzo argomento della funzione REGEXP_LIKE) possiamo fare una ricerca case sensitive (l’impostazione predefinita in Oracle).
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'c' ) ;NAME-------------------------BaerAbelRaphaelyGreenberg
E specificando la lettera ‘i’ (come terzo argomento della funzione REGEXP_LIKE) possiamo fare una ricerca case insensitive.
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'i' ) ;NAME-------------------------BellBernsteinBaerAbelRaphaelyGreenberg
Uso dell’accento Circonflesso(^) operatore
Possiamo usare l’accento circonflesso (^) operatore per indicare un inizio di caratteri per riga, in questo REGEXP_LIKE esempio si può recuperare tutti i nomi che iniziano con la lettera sequenza di ‘essere’ o ‘ba’ (distinzione tra maiuscole e minuscole ricerca)
SELECT *FROM namesWHERE regexp_like (name , '^be|^ba' , 'i' ) ;NAME-------------------------BaidaBellBandaBatesBernsteinBaer
Utilizzando il Dollaro ($) operatore
E ‘ possibile utilizzare il simbolo del dollaro ($) operatore di indicare un termine di caratteri per riga, in questo REGEXP_LIKE esempio si può recuperare tutti i nomi che terminano con la lettera-sequenza di ‘es’ o ‘er’ (distinzione tra maiuscole e minuscole di ricerca).
SELECT *FROM namesWHERE regexp_like (name , 'es$|er$' , 'i' ) ;NAME-------------------------PhiltankerColmenaresJonesGatesDaviesNayerStilesDellingerBatesBaer
Usando le parentesi quadre
Possiamo usare le parentesi quadre per specificare un elenco corrispondente che dovrebbe corrispondere a una qualsiasi delle espressioni rappresentate in esso. Il prossimo esempio Oracle REGEXP_LIKE recupererà tutti i nomi che contengono le lettere ‘ j ‘ o ‘z’.
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------RajsLorentzGietzOzerErrazuriz
Questo esempio REGEXP_LIKE recupererebbe tutti i nomi che contengono le lettere ‘b’ o ‘z’ o ‘E’ (ricerca case sensitive)
SELECT * FROM names WHERE regexp_like (name , '') ;NAME-------------------------TobiasCabrioEverettLorentzPataballaErnstCambraultGietzMcEwenCambrault
Successivamente, modificheremo la nostra ultima query e la renderemo una ricerca case insensitive :
SELECT *FROM namesWHERE regexp_like (name , '' , 'i') ;NAME-------------------------PhiltankerZacharyMarkleGeePerkinsColmenaresPatelOConnellMikkilineniTobiasSeo
Questo Oracolo REGEXP_LIKE esempio, sarebbe di recuperare tutti i nomi che contengono le lettere ‘a’, ‘b’ o ‘c’ :
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
E invece di specificare le lettere ‘a’, ‘b’ e ‘c’ separatamente, si può specificare un intervallo :
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
Il prossimo Oracle REGEP_LIKE esempio, sarebbe di recuperare tutti i nomi che contengono una lettera nella gamma di ” d ” e “g”, seguito dalla lettera “a”.
SELECT *FROM namesWHERE regexp_like (name , 'a') ;NAME-------------------------VargasBaidaFleaurBanda
Utilizzando il punto (.) Operatore
Il periodo (.) operatore corrisponde a qualsiasi carattere tranne NULL, il prossimo esempio Oracle REGEXP_LIKE recupererebbe tutti i nomi che contengono una lettera nell’intervallo di ‘b’ e ‘g’, seguito da qualsiasi carattere, seguito dalla lettera ‘a’.
SELECT *FROM namesWHERE regexp_like (name , '.') ;NAME-------------------------ColmenaresTobiasMcCainSarchandSewallCambraultSciarraCambrault
Possiamo usare l’operatore Punto per rappresentare più di un carattere, il prossimo esempio Oracle REGEXP_LIKE recupererebbe tutti i nomi che contengono una lettera nell’intervallo ‘b’ e ‘g’, seguita da due caratteri qualsiasi, seguita dalla lettera ‘a’.
SELECT *FROM namesWHERE regexp_like (name , '..') ;NAME-------------------------De HaanKochhar
Utilizzando le parentesi graffe
Le parentesi graffe vengono utilizzate per specificare un numero esatto di occorrenze, ad esempio visualizzare tutti i nomi che contengono doppie lettere ‘o’.
SELECT *FROM namesWHERE regexp_like (name , '{2}') ;NAME-------------------------KhooBloom