Oracle REGEXP_LIKE Examples
reguljära uttryck är mönster som används för att matcha teckenkombinationer i strängar. Oracle 10g introducerade stöd för reguljära uttryck med olika funktioner. Det här inlägget fokuserar på Oracle REGEXP_LIKE-funktionen och förklarar hur man använder den.
beskrivning
Oracle REGEXP_LIKE används för att utföra en reguljär uttrycksmatchning (snarare än en enkel mönstermatchning utförd av LIKE).
syntax
REGEXP_LIKE ( string expression, pattern )
- stränguttryck – Stränguttrycket.
- mönster-matchningsparametern för Reguljärt uttryck
- – låter dig ändra Standardmatchningsbeteendet för Oracle REGEXP_LIKE-funktionen (till exempel ändra sökningen från skiftlägeskänslig till skiftlägeskänslig).
grundläggande Oracle REGEXP_LIKE exempel
vi börjar med att skapa en tabell som heter namn, baserat på dess värden, kommer följande Oracle REGEXP_LIKE exempel utföra olika reguljära uttryck sökningar.
CREATE TABLE namesASSELECT last_name AS NAMEFROM hr.employeesORDER BY salary ;
följande Oracle REGEXP_LIKE exempel skulle hämta alla namn som innehåller bokstaven ’z’. Detta Oracle SELECT-uttalande sätter faktiskt ingen nedre eller övre gräns för antalet bokstäver före eller efter bokstaven ’z’ (valfritt antal tecken är tillåtna), men kräver att ordet innehåller bokstaven ’z’.
SELECT *FROM namesWHERE regexp_like (name , 'z') ;NAME-------------------------LorentzGietzOzer
nästa Oracle REGEXP_LIKE-exempel skulle hämta alla namn som innehåller bokstavssekvensen ”be”. Återigen sätter detta Oracle SELECT-uttalande faktiskt ingen nedre eller övre gräns för antalet bokstäver före eller efter bokstavssekvensen ’be’ (valfritt antal tecken är tillåtna), men kräver att ordet innehåller bokstavssekvensen ’be’.
SELECT *FROM namesWHERE regexp_like (name , 'be') ;NAME---------------------------AbelGreenberg
använda röroperatören
Röroperatören (/) används för att ange alternativa matchningar. I nästa Oracle REGEXP_LIKE-exempel skulle vi använda röroperatören (|) för att hämta alla namn som innehåller bokstavssekvensen ’be’ eller ’ae’. Detta Oracle SELECT-uttalande sätter faktiskt ingen nedre eller övre gräns för antalet bokstäver före eller efter bokstavssekvensen ’be’ eller ’ae'(valfritt antal tecken är tillåtna), men kräver att ordet innehåller dessa sekvenser.
SELECT *FROM namesWHERE regexp_like (name , 'be|ae') ;NAME-------------------------BaerAbelRaphaelyGreenberg
genom att ange bokstaven ’c’ (som det tredje argumentet för REGEXP_LIKE-funktionen) kan vi göra en skiftlägeskänslig sökning (Standard i Oracle).
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'c' ) ;NAME-------------------------BaerAbelRaphaelyGreenberg
och genom att ange bokstaven ’i’ (som det tredje argumentet för REGEXP_LIKE-funktionen) kan vi göra en skiftlägeskänslig sökning.
SELECT *FROM namesWHERE regexp_like (name , 'be|ae' , 'i' ) ;NAME-------------------------BellBernsteinBaerAbelRaphaelyGreenberg
använda operatören Caret (^)
Vi kan använda operatören caret (^) för att ange ett tecken i början av raden, i det här REGEXP_LIKE exemplet skulle vi hämta alla namn som börjar med bokstavssekvensen”be”eller” ba ”(skiftlägeskänslig sökning)
SELECT *FROM namesWHERE regexp_like (name , '^be|^ba' , 'i' ) ;NAME-------------------------BaidaBellBandaBatesBernsteinBaer
använda Dollar ($) operatör
Vi kan använda Dollar ($) operatör för att indikera en end-of-LINE tecken, i detta regexp_like exempel skulle vi hämta alla namn som slutar med bokstavssekvensen ’es’ eller ’er’ (skiftlägeskänslig sökning).
SELECT *FROM namesWHERE regexp_like (name , 'es$|er$' , 'i' ) ;NAME-------------------------PhiltankerColmenaresJonesGatesDaviesNayerStilesDellingerBatesBaer
använda hakparenteser
Vi kan använda hakparenteserna för att ange en matchande lista som ska matcha något av de uttryck som representeras i den. Nästa Oracle REGEXP_LIKE exempel skulle hämta alla namn som innehåller bokstäverna ’ j ’eller’z’.
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------RajsLorentzGietzOzerErrazuriz
detta REGEXP_LIKE exempel skulle hämta alla namn som innehåller bokstäverna ’b’ eller ’z’ eller ’E’ (skiftlägeskänslig sökning)
SELECT * FROM names WHERE regexp_like (name , '') ;NAME-------------------------TobiasCabrioEverettLorentzPataballaErnstCambraultGietzMcEwenCambrault
därefter ändrar vi vår sista fråga och gör den till en skiftlägeskänslig sökning :
SELECT *FROM namesWHERE regexp_like (name , '' , 'i') ;NAME-------------------------PhiltankerZacharyMarkleGeePerkinsColmenaresPatelOConnellMikkilineniTobiasSeo
detta Oracle REGEXP_LIKE-exempel skulle hämta alla namn som innehåller bokstäverna”a”,”b”eller ” c”:
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
och istället för att ange bokstäverna ”A”, ” b ” och ” c ”separat kan vi ange ett intervall :
SELECT *FROM namesWHERE regexp_like (name , '') ;NAME-------------------------PhiltankerMarkleLandryColmenaresPatelVargasSullivanMarlowGrantMatos
nästa Oracle regep_like-exempel skulle hämta alla namn som innehåller en bokstav i intervallet ” d ” och ”g”, följt av bokstaven ”a”.
SELECT *FROM namesWHERE regexp_like (name , 'a') ;NAME-------------------------VargasBaidaFleaurBanda
använda perioden (.) Operatör
perioden (.) operatör matchar alla tecken utom NULL, nästa Oracle REGEXP_LIKE exempel skulle hämta alla namn som innehåller en bokstav i intervallet ’ b ’och’ g’, följt av ett tecken, följt av bokstaven’a’.
SELECT *FROM namesWHERE regexp_like (name , '.') ;NAME-------------------------ColmenaresTobiasMcCainSarchandSewallCambraultSciarraCambrault
Vi kan använda Periodoperatören för att representera mer än ett tecken, nästa Oracle REGEXP_LIKE-exempel skulle hämta alla namn som innehåller en bokstav i intervallet ” b ” och ”g”, följt av två tecken, följt av bokstaven ”a”.
SELECT *FROM namesWHERE regexp_like (name , '..') ;NAME-------------------------De HaanKochhar
använda lockiga parenteser
de lockiga parenteserna används för att ange ett exakt antal händelser, till exempel visa alla namn som innehåller dubbla o-bokstäver.
SELECT *FROM namesWHERE regexp_like (name , '{2}') ;NAME-------------------------KhooBloom