MYSQL Regular Expressions (REGEXP) med syntax och exempel
Vad är reguljära uttryck?
Reguljära uttryck hjälper till att söka efter data som matchar komplexa kriterier. Vi tittade på jokertecken i föregående handledning. Om du har arbetat med jokertecken tidigare kanske du undrar varför du lär dig reguljära uttryck när du kan få liknande resultat med hjälp av jokertecken. Eftersom, jämfört med jokertecken, tillåter reguljära uttryck oss att söka efter data som matchar ännu mer komplexa kriterier.
Grundläggande syntax
Den grundläggande syntaxen för ett reguljärt uttryck är följande
SELECT statements... WHERE fieldname REGEXP 'pattern';
HÄR –
- "VÄLJ uttalanden..." är standarden SELECT-sats
- "WHERE fältnamn" är namnet på kolumnen som det reguljära uttrycket ska utföras på.
- "REGEXP 'mönster'" REGEXP är operatorn för reguljära uttryck och 'mönster' representerar mönstret som ska matchas av REGEXP. RLIKE är synonym för REGEXP och uppnår samma resultat som REGEXP. För att undvika att förväxla det med LIKE-operatorn, 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 fråga söker efter alla filmtitlar som har ordkoden i sig. Det spelar ingen roll om "koden" är i början, mitten eller slutet av titeln. Så länge det finns med 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å till väga 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]';
Exekvera skriptet ovan i MySQL arbetsbänk 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 reguljära uttryck som ansvarar för ovanstående resultat.
'^[abcd]' markeringen (^) betyder att mönstermatchningen ska tillämpas i början och charlist [abcd] betyder att endast filmtitlar som börjar med a, b, c eller d returneras i vår resultatuppsättning.
Låt oss modifiera vårt skript ovan och använda NOT charlist och se vilka resultat vi kommer att få efter att ha kört vår fråga.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Exekvera skriptet ovan i MySQL arbetsbänk 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 ansvarar för ovanstående resultat.
'^[^abcd]' markeringen (^) betyder att mönstermatchningen ska tillämpas i början och charlist [^abcd] betyder att filmtitlarna som börjar med någon av de bifogade karaktärerna exkluderas från resultatuppsättningen.
Reguljära uttrycksmetakaraktärer
Det vi tittade på i exemplet ovan är den enklaste formen av ett reguljärt uttryck. Låt oss nu titta på mer avancerade mönstermatchningar för reguljära uttryck. Anta att vi vill söka efter filmtitlar som börjar med mönstret "koden" endast med hjälp av ett reguljärt uttryck, hur skulle vi gå till väga? Svaret är metatecken. De tillåter oss att finjustera våra mönstersökresultat med hjälp av reguljära uttryck.
Char | Description | Exempelvis | |
---|---|---|---|
* | Ocuco-landskapet asterisk (*) metatecken används för att matcha noll (0) eller fler förekomster av strängarna som föregår den | VÄLJ * FRÅN filmer WHERE titel REGEXP 'da*'; kommer att ge alla filmer som innehåller karaktärer "da". Till exempel Da Vinci-koden, Daddy's Little Girls. | |
+ | Ocuco-landskapet mer (+) metatecken används för att matcha en eller flera förekomster av strängar som föregår den. | SELECT * FRÅN `movies` WHERE `title` 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 som föregår den. | SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; kommer att ge alla kategorier som innehåller sträng com . Till exempel komedi , romantisk komedi . | |
. | Ocuco-landskapet prick (.) metatecken används för att matcha ett enskilt tecken med undantag för en ny rad. | VÄLJ * FRÅN filmer WHERE `year_released` REGEXP '200.'; kommer att ge alla filmer som släppts under åren som börjar med tecken "200" följt av en enskild karaktär. Till exempel 2005,2007,2008, XNUMX, XNUMX etc. | |
[abc] | Ocuco-landskapet charlist [abc] används för att matcha något av de bifogade tecknen. | SELECT * FRÅN `movies` WHERE `title` REGEXP '[vwxyz]'; kommer att ge alla filmer som innehåller en enskild karaktär i "vwxyz". Till exempel X-Men, Da Vinci Code, etc. | |
[^ abc] | Ocuco-landskapet charlist [^abc] används för att matcha alla tecken utom de bifogade. | SELECT * FRÅN `movies` WHERE `title` REGEXP '^[^vwxyz]'; kommer att ge alla filmer som innehåller andra karaktärer än de i "vwxyz". | |
[AZ] | Ocuco-landskapet [AZ] används för att matcha alla versaler. | SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; kommer att ge alla medlemmar som har en postadress som innehåller ett tecken från A till Ö. Till exempel Janet Jones med medlemsnummer 1. | |
[Az] | Ocuco-landskapet [Az] används för att matcha alla små bokstäver | SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; kommer att ge alla medlemmar som har postadresser som innehåller alla tecken från a till z. .Till exempel Janet Jones med medlemsnummer 1. | |
[0-9] | Ocuco-landskapet [0-9] används för att matcha valfri siffra från 0 till 9. | VÄLJ * FRÅN `members` WHERE `contact_number` REGEXP '[0-9]' kommer att ge alla medlemmar som har skickat in kontaktnummer som innehåller tecknen "[0-9]". Till exempel Robert Phil. | |
^ | Ocuco-landskapet caret (^) används för att starta matchen från början. | SELECT * FRÅN `movies` WHERE `title` REGEXP '^[cd]'; ger alla filmer med titeln som börjar med någon av karaktärerna i "cd". Till exempel Code Name Black, Daddy's Little Girls och Da Vinci-koden. | |
| | Ocuco-landskapet vertikal streck (|) används för att isolera alternativ. | SELECT * FRÅN `movies` WHERE `title` REGEXP '^[cd]|^[u]'; ger alla filmer med titeln som börjar med någon av karaktärerna i "cd" eller "u". Till exempel Code Name Black, Daddy's Little Girl, Da Vinci-koden och Underworld – AwakenIng. | |
[[:<:]] | Ocuco-landskapet[[:<:]] matchar början av ord. | SELECT * FRÅN `movies` WHERE `title` REGEXP '[[:<:]]for';
ger alla filmer med titlar som börjar med karaktärerna. Till exempel: Att glömma Sarah Marshal. |
|
[[:>:]] | Ocuco-landskapet [[:>:]] matchar slutet av ord. | SELECT * FRÅN `movies` WHERE `title` REGEXP 'ack[[:>:]]';
ger alla filmer med titlar som slutar med tecknen "ack" .Till exempel Kodnamn Svart. |
|
[:klass:] | Ocuco-landskapet [:klass:] matchar en teckenklass dvs
[:alfa:] att matcha bokstäver, [:Plats:] för att matcha vitt utrymme, [:punct:] är matcha skiljetecken och [:upper:] för överklassbokstäver. |
SELECT * FRÅN `movies` WHERE `title` REGEXP '[:alpha:]';
ger alla filmer med titlar endast innehålla bokstäver .Till exempel glömma Sarah Marshal, X-Men etc. Film som Pirates of the Caribbean 4 kommer att utelämnas av denna fråga. |
Omvänt snedstreck (\) används som ett escape-tecken. Om vi vill använda det som en del av mönstret i ett reguljärt uttryck bör vi använda dubbla bakåtstreck (\\)
Sammanfattning
- Reguljära uttryck ger en kraftfull och flexibel mönstermatchning som kan hjälpa oss att implementera kraftsökverktyg för våra databassystem.
- REGEXP är operatorn som används när man utför matchningar av reguljära uttrycksmönster. RLIKE är synonymen
- Reguljära uttryck stöder ett antal metatecken som möjliggör mer flexibilitet och kontroll när du utför mönstermatchningar.
- Omvänt snedstreck används som ett escape-tecken i reguljära uttryck. Det beaktas bara i mönstermatchningen om dubbla snedstreck har använts.
- Reguljära uttryck är inte skiftlägeskänsliga.