Vad är reguljära uttryck?
Regular Expressions hjälper till att söka i data som matchar komplexa kriterier. Vi tittade på jokertecken i föregående handledning. Om du har arbetat med jokertecken tidigare kanske du frågar varför lära dig vanliga uttryck när du kan få liknande resultat med jokertecken. Eftersom, jämfört med jokertecken, med reguljära uttryck kan vi söka i data som matchar ännu mer komplexa kriterier.
Grundläggande syntax
Den grundläggande syntaxen för ett reguljärt uttryck är som följer
SELECT statements… WHERE fieldname REGEXP 'pattern';
HÄR -
- "SELECT-uttalanden ..." är standard-SELECT-satsen
- "VAR fältnamn" är namnet på den kolumn som det reguljära uttrycket ska utföras på.
- "REGEXP" -mönster "" REGEXP är operatoren för reguljära uttryck och "mönster" representerar det mönster som ska matchas av REGEXP. RLIKE är synonymen för REGEXP och uppnår samma resultat som REGEXP. För att undvika att förväxla det med LIKE-operatören är det bättre att använda REGEXP istället.
Låt oss nu titta på ett praktiskt exempel-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Ovanstående sökning söker efter alla filmtitlar som innehåller ordkoden. Det spelar ingen roll om "koden" är i början, mitten eller slutet av titeln. Så länge det finns i titeln kommer det att övervägas.
Låt oss anta att vi vill söka efter filmer som börjar med a, b, c eller d, följt av valfritt antal andra karaktärer, hur skulle vi gå för att uppnå det. Vi kan använda ett reguljärt uttryck tillsammans med metatecken för att uppnå våra önskade resultat.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Att köra ovanstående skript i MySQL-arbetsbänken mot myflixdb ger oss följande resultat.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
6 | Angels and Demons | NULL | 2007 | 6 |
7 | Davinci Code | NULL | 2007 | 6 |
Låt oss nu titta närmare på vårt vanliga uttryck som är ansvarigt för ovanstående resultat.
'[abcd]' markören (^) betyder att mönstermatchningen ska tillämpas i början och charlisten [abcd] betyder att endast filmtitlar som börjar med a, b, c eller d returneras i vår resultatuppsättning.
Låt oss ändra vårt ovanstående skript och använda listan INTE och se vilka resultat vi får efter att vår fråga har körts.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Att köra ovanstående skript i MySQL-arbetsbänken mot myflixdb ger oss följande resultat.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
3 | X-Men | 2008 | ||
9 | Honey mooners | John Schultz | 2005 | 8 |
16 | 67% Guilty | 2012 | ||
17 | The Great Dictator | Chalie Chaplie | 1920 | 7 |
18 | sample movie | Anonymous | 8 | |
19 | movie 3 | John Brown | 1920 | 8 |
Låt oss nu titta närmare på vårt reguljära uttryck som är ansvarigt för ovanstående resultat.
'[abcd]' markören (^) betyder att mönstermatchningen ska tillämpas i början och charlistan [abcd] betyder att filmtitlarna som börjar med något av de medföljande tecknen undantas från resultatuppsättningen.
Metatecken för regelbundet uttryck
Det vi tittade på i exemplet ovan är den enklaste formen av ett reguljärt uttryck. Låt oss nu titta på mer avancerade matchningar av reguljära uttrycksmönster. Antag att vi vill söka efter filmtitlar som bara börjar med mönstret "kod" med ett reguljärt uttryck, hur skulle vi gå åt det? Svaret är metatecken. De tillåter oss att finjustera våra sökresultat på mönster med hjälp av reguljära uttryck.
Röding | Beskrivning | Exempel | |
---|---|---|---|
* | Den asterisk (*) metatecken används för att matcha noll (0) eller fler instanser av strängarna föregår det | VÄLJ * FRÅN filmer VAR titel REGEXP 'da *'; kommer att ge alla filmer som innehåller karaktärer "da". Till exempel Da Vinci Code, Daddy's Little Girls. | |
+ | Den plus (+) metatecken används för att matcha en eller flera instanser av strängar föregår den. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP 'mon +'; kommer att ge alla filmer som innehåller karaktärer "mon". Till exempel änglar och demoner. | |
? | Frågan (?) Metatecken används för att matcha noll (0) eller en förekomst av strängarna före den. | VÄLJ * FRÅN "kategorier" VAR "kategorinamn" REGEXP 'com?'; ger alla kategorier som innehåller strängkombi. Till exempel komedi, romantisk komedi. | |
. | Den punkt (.) Metatecken används för att matcha någon enstaka tecken i undantag för en ny rad. | VÄLJ * FRÅN filmer VAR `year_released` REGEXP '200.'; kommer att ge alla filmer som släppts under åren som börjar med karaktärerna "200" följt av en enskild karaktär. Till exempel 2005,2007,2008 etc. | |
[abc] | Den charlist [abc] används för att matcha någon av de medföljande tecken. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP '[vwxyz]'; ger alla filmer som innehåller en enskild karaktär i "vwxyz". Till exempel X-Men, Da Vinci Code, etc. | |
[abc] | Den charlist [abc] används för att matcha alla tecken med undantag för de bifogade. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP '[vwxyz]'; kommer att ge alla filmer som innehåller andra karaktärer än de i "vwxyz". | |
[AZ] | Den [AZ] används för att matcha varje bokstav. | VÄLJ * FRÅN `medlemmar` VAR` postal_adress` REGEXP '[AZ]'; ger alla medlemmar som har postadress som innehåller tecken från A till Z ... Till exempel Janet Jones med medlemsnummer 1. | |
[az] | Den [az] används för att matcha någon liten bokstav | VÄLJ * FRÅN `medlemmar` VAR` postal_adress` REGEXP '[az]'; ger alla medlemmar som har postadresser som innehåller tecken från a till z ... Till exempel Janet Jones med medlemsnummer 1. | |
[0-9] | Den [0-9] används för att matcha alla siffror från 0 igenom till 9. | VÄLJ * FRÅN 'medlemmar' VAR 'kontakt_nummer' REGEXP '[0-9]' ger alla medlemmar som har skickat in kontaktnummer som innehåller tecknen "[0-9]". Till exempel Robert Phil. | |
^ | Den cirkumflex (^) används för att starta matchen i början. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP '[cd]'; ger alla filmer med titeln som börjar med någon av karaktärerna i "cd". Till exempel kodnamn svart, pappas små flickor och Da Vinci kod. | |
| | Den vertikala stapeln (|) används för att isolera alternativ. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP '[cd] | [u]'; ger alla filmer med titeln som börjar med någon av karaktärerna i "cd" eller "u". Till exempel kodnamn svart, pappas lilla tjej, Da Vinci-koden och Underworld - Awakening. | |
[[: <:]] | Den [[: <:]] matchar början av ord. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP '[[: <:]] för'; ger alla filmer med titlar som börjar med karaktärerna. Till exempel: Glömma Sarah Marshal. | |
[[:>:]] | Den [[:>:]] matchar slutet av ord. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP 'ack [[:>:]]'; ger alla filmer med titlar som slutar med karaktärerna "ack". Till exempel kodnamn svart. | |
[:klass:] | Den [: Klass:] matchar ett tecken klass dvs. [: alpha:] för att matcha bokstäver [: space:] för att matcha blank [: punct:] är match skiljetecken och [: upper:] för överklass bokstäver. | VÄLJ * FRÅN `filmer` VAR` titel` REGEXP '[: alpha:]'; ger alla filmer med titlar endast bokstäver. Till exempel att glömma Sarah Marshal, X-Men etc. Film som Pirates of the Caribbean 4 kommer att utelämnas av denna fråga. |
Backslash (\) används för att vara en escape-karaktär. Om vi vill använda det som en del av mönstret i ett reguljärt uttryck, bör vi använda dubbla snedstreck (\\)
Sammanfattning
- Regelbundna uttryck ger en kraftfull och flexibel mönstermatchning som kan hjälpa oss att implementera kraftsökningsverktyg för våra databassystem.
- REGEXP är den operatör som används vid matchning av mönster för reguljära uttryck. RLIKE är synonymen
- Regeluttryck stöder ett antal metatecken som möjliggör mer flexibilitet och kontroll när du utför mönstermatchningar.
- Backslash används som en flyktkaraktär i reguljära uttryck. Det övervägs bara i mönstermatchningen om dubbla snedstreck har använts.
- Regeluttryck är inte skiftlägeskänsliga.