MYSQL Regular Expressions (REGEXP) med syntaks og eksempler
Hvad er regulære udtryk?
Regulære udtryk hjælper med at søge data, der matcher komplekse kriterier. Vi så på jokertegn i den forrige tutorial. Hvis du har arbejdet med jokertegn før, spørger du måske, hvorfor lære regulære udtryk, når du kan få lignende resultater ved at bruge jokertegnene. Fordi, sammenlignet med jokertegn, giver regulære udtryk os mulighed for at søge efter data, der matcher endnu mere komplekse kriterier.
Grundlæggende syntaks
Den grundlæggende syntaks for et regulært udtryk er som følger
SELECT statements... WHERE fieldname REGEXP 'pattern';
HER -
- "VÆLG udsagn..." er standarden SELECT erklæring
- "WHERE feltnavn" er navnet på den kolonne, som det regulære udtryk skal udføres på.
- "REGEXP 'mønster'" REGEXP er operatoren for regulære udtryk, og 'mønster' repræsenterer det mønster, der skal matches af REGEXP. RLIKE er synonym for REGEXP og opnår de samme resultater som REGEXP. For at undgå at forveksle det med LIKE-operatøren, er det bedre at bruge REGEXP i stedet.
Lad os nu se på et praktisk eksempel-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Ovenstående forespørgsel søger efter alle filmtitler, der har ordkoden i sig. Det er ligegyldigt, om "koden" er i begyndelsen, midten eller slutningen af titlen. Så længe det er indeholdt i titlen, vil det blive taget i betragtning.
Lad os antage, at vi vil søge efter film, der starter med a, b, c eller d , efterfulgt af et hvilket som helst antal andre karakterer, hvordan ville vi gøre for at opnå det. Vi kan bruge et regulært udtryk sammen med metakaraktererne for at opnå vores ønskede resultater.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Udførelse af ovenstående script i MySQL arbejdsbord mod myflixdb giver os følgende resultater.
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 |
Lad os nu se nærmere på vores regulære udtryk, der er ansvarlig for ovenstående resultat.
'^[abcd]' indtegningen (^) betyder, at mønstermatchet skal anvendes i begyndelsen, og charlist [abcd] betyder, at kun filmtitler, der starter med a, b, c eller d, returneres i vores resultatsæt.
Lad os ændre vores ovenstående script og bruge NOT charlist og se, hvilke resultater vi får efter at have udført vores forespørgsel.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Udførelse af ovenstående script i MySQL workbench mod myflixdb giver os følgende resultater.
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 |
Lad os nu se nærmere på vores regulære udtryk, der er ansvarlig for ovenstående resultater.
'^[^abcd]' indtegningen (^) betyder, at mønstermatchet skal anvendes i begyndelsen, og charlist [^abcd] betyder, at filmtitlerne, der starter med en af de vedlagte karakterer, er udelukket fra resultatsættet.
Regulære udtryks metakarakterer
Det, vi så på i ovenstående eksempel, er den enkleste form for et regulært udtryk. Lad os nu se på mere avancerede regulære udtryksmønstre. Antag, at vi kun vil søge efter filmtitler, der starter med mønsterets "kode", ved at bruge et regulært udtryk, hvordan ville vi så gå frem? Svaret er metakarakterer. De giver os mulighed for at finjustere vores mønstersøgeresultater ved hjælp af regulære udtryk.
Char | Tekniske beskrivelser | Eksempel | |
---|---|---|---|
* | stjerne (*) metategn bruges til at matche nul (0) eller flere forekomster af strengene forud for det | VÆLG * FRA film WHERE titel REGEXP 'da*'; vil give alle film, der indeholder karakterer, "da". For eksempel Da Vinci-koden, Daddy's Little Girls. | |
+ | mere (+) metategn bruges til at matche en eller flere forekomster af strenge forud for det. | VÆLG * FRA `movies` WHERE `title` REGEXP 'mon+'; vil give alle film, der indeholder karakterer "mon". For eksempel Engle og Dæmoner. | |
? | Spørgsmålet(?) metategn bruges til at matche nul (0) eller én forekomst af strengene forud for det. | VÆLG * FRA `kategorier` WHERE `kategorinavn` REGEXP 'com?'; vil give alle de kategorier, der indeholder string com. For eksempel komedie, romantisk komedie. | |
. | prik (.) metategn bruges til at matche ethvert enkelt tegn med undtagelse af en ny linje. | VÆLG * FRA film, HVOR `year_released` REGEXP '200.'; vil give alle de film, der er udgivet i årene, begyndende med tegnene "200" efterfulgt af en enkelt karakter. For eksempel 2005,2007,2008, XNUMX, XNUMX osv. | |
[abc] | charlist [abc] bruges til at matche et hvilket som helst af de vedlagte tegn. | SELECT * FRA `movies` WHERE `title` REGEXP '[vwxyz]'; vil give alle de film, der indeholder en enkelt karakter i "vwxyz". For eksempel X-Men, Da Vinci Code osv. | |
[^ abc] | charlist [^abc] bruges til at matche alle tegn undtagen de vedlagte. | VÆLG * FRA `movies` WHERE `title` REGEXP '^[^vwxyz]'; vil give alle de film, der indeholder andre karakterer end dem i "vwxyz". | |
[AZ] | [AZ] bruges til at matche ethvert stort bogstav. | SELECT * FRA `members` WHERE `postal_address` REGEXP '[AZ]'; vil give alle de medlemmer, der har postadresse, der indeholder et hvilket som helst tegn fra A til Z. .For eksempel Janet Jones med medlemsnummer 1. | |
[az] | [az] bruges til at matche alle små bogstaver | SELECT * FRA `members` WHERE `postal_address` REGEXP '[az]'; vil give alle medlemmer, der har postadresser, der indeholder et hvilket som helst tegn fra a til z. .For eksempel Janet Jones med medlemsnummer 1. | |
[0-9] | [0-9] bruges til at matche ethvert ciffer fra 0 til 9. | VÆLG * FRA `medlemmer` HVOR `contact_number` REGEXP '[0-9]' vil give alle medlemmer, der har indsendt kontaktnumre, der indeholder tegnene "[0-9]". For eksempel Robert Phil. | |
^ | karet (^) bruges til at starte kampen ved begyndelsen. | SELECT * FRA `movies` WHERE `title` REGEXP '^[cd]'; giver alle film med titlen, der starter med en hvilken som helst af karaktererne i "cd". For eksempel Code Name Black, Daddy's Little Girls og Da Vinci Code. | |
| | lodret streg (|) bruges til at isolere alternativer. | SELECT * FRA `movies` WHERE `title` REGEXP '^[cd]|^[u]'; giver alle film med titlen, der starter med en hvilken som helst af karaktererne i "cd" eller "u". For eksempel Code Name Black, Daddy's Little Girl, Da Vinci Code og Underworld – AwakenIng. | |
[[:<:]] | [[:<:]] matcher begyndelsen af ord. | SELECT * FRA `movies` WHERE `title` REGEXP '[[:<:]]for';
giver alle film med titler, der begynder med karaktererne. For eksempel: At glemme Sarah Marshal. |
|
[[:>:]] | [[:>:]] matcher slutningen af ord. | SELECT * FRA `movies` WHERE `title` REGEXP 'ack[[:>:]]';
giver alle film med titler, der slutter med tegnene "ack" .For eksempel Kodenavn Sort. |
|
[:klasse:] | [:klasse:] matcher en karakterklasse dvs
[:alfa:] at matche bogstaver, [:plads:] for at matche hvidt mellemrum, [:punct:] er matchende tegnsætning og [:upper:] for overklassebogstaver. |
SELECT * FRA `movies` WHERE `title` REGEXP '[:alpha:]';
giver alle film med titler kun bogstaver .For eksempel glemmer Sarah Marshal, X-Men osv. Film som Pirates of the Caribbean 4 vil blive udeladt af denne forespørgsel. |
Omvendt skråstreg (\) bruges til som et escape-tegn. Hvis vi vil bruge det som en del af mønsteret i et regulært udtryk, skal vi bruge dobbelte omvendte skråstreg (\\)
Resumé
- Regulære udtryk giver et kraftfuldt og fleksibelt mønstermatch, der kan hjælpe os med at implementere kraftsøgeværktøjer til vores databasesystemer.
- REGEXP er den operator, der bruges, når der udføres matches med regulære udtryk. RLIKE er synonymet
- Regulære udtryk understøtter en række metakarakterer, som giver mulighed for mere fleksibilitet og kontrol, når der udføres mønstermatches.
- Omvendt skråstreg bruges som et escape-tegn i regulære udtryk. Det tages kun i betragtning i mønstermatchen, hvis der er brugt dobbelte skråstreg.
- Regulære udtryk skelner ikke mellem store og små bogstaver.