Hva er vanlige uttrykk?
Regular Expressions hjelper deg med å søke i data som samsvarer med komplekse kriterier. Vi så på jokertegn i forrige opplæring. Hvis du har jobbet med jokertegn før, kan du spørre hvorfor lære vanlige uttrykk når du kan få lignende resultater ved hjelp av jokertegn. Fordi, i forhold til jokertegn, tillater vanlige uttrykk oss å søke i data som samsvarer med enda mer komplekse kriterier.
Grunnleggende syntaks
Den grunnleggende syntaksen for et vanlig uttrykk er som følger
SELECT statements… WHERE fieldname REGEXP 'pattern';
HER -
- "SELECT-utsagn ..." er standard SELECT-setning
- "HVOR feltnavn" er navnet på kolonnen som det vanlige uttrykket skal utføres på.
- "REGEXP 'mønster'" REGEXP er operatoren for vanlig uttrykk, og 'mønster' representerer mønsteret som skal matches av REGEXP. RLIKE er synonymet for REGEXP og oppnår de samme resultatene som REGEXP. For å unngå å forveksle det med LIKE-operatøren, er det bedre å bruke REGEXP i stedet.
La oss nå se på et praktisk eksempel-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Spørringen ovenfor søker etter alle filmtitlene som inneholder ordkoden. Det spiller ingen rolle om "koden" er i begynnelsen, midten eller slutten av tittelen. Så lenge den er inneholdt i tittelen, vil den bli vurdert.
La oss anta at vi vil søke etter filmer som starter med a, b, c eller d, etterfulgt av et hvilket som helst antall andre tegn, hvordan vil vi gå for å oppnå det. Vi kan bruke et vanlig uttrykk sammen med metategnene for å oppnå de ønskede resultatene.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Å utføre skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss 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 |
La oss nå se nærmere på vårt vanlige uttrykk som er ansvarlig for resultatet ovenfor.
'[abcd]' caret (^) betyr at mønsterkampen skal brukes i begynnelsen, og charlisten [abcd] betyr at bare filmtitler som starter med a, b, c eller d blir returnert i vårt resultatsett.
La oss endre skriptet vårt ovenfor og bruke IKKE charlisten og se hvilke resultater vi får etter å ha utført spørringen.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Å utføre skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss 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 |
La oss nå se nærmere på vårt vanlige uttrykk som er ansvarlig for resultatene ovenfor.
'[abcd]' caret (^) betyr at mønsterkampen skal brukes i begynnelsen, og charlisten [abcd] betyr at filmtitlene som begynner med noen av de vedlagte tegnene, er ekskludert fra resultatsettet.
Vanlige uttrykk metategn
Det vi så på i eksemplet ovenfor er den enkleste formen for et regulært uttrykk. La oss nå se på mer avanserte samsvar med regulære uttrykk. Anta at vi ønsker å søke etter filmtitler som begynner med mønsteret "kode" bare ved å bruke et vanlig uttrykk, hvordan vil vi gjøre om det? Svaret er metategn. De tillater oss å finjustere mønsterets søkeresultater ved å bruke regulære uttrykk.
Char | Beskrivelse | Eksempel | |
---|---|---|---|
* | Den stjerne (*) metategn anvendes for å samsvare med null (0) eller flere forekomster av strengene foregå det | VELG * FRA filmer HVOR tittel REGEXP 'da *'; vil gi alle filmer som inneholder tegn "da". For eksempel Da Vinci Code, Daddy's Little Girls. | |
+ | Den pluss (+) metategn anvendes for å samsvare med en eller flere instanser av strenger foregå det. | VELG * FRA `filmer` HVOR` tittel` REGEXP 'mon +'; vil gi alle filmer som inneholder tegn "mon". For eksempel, Engler og demoner. | |
? | Spørsmålet (?) Metakarakter brukes til å matche null (0) eller ett tilfelle av strengene som er forut for det. | VELG * FRA `kategorier` HVOR` kategorienavn` REGEXP 'com?'; vil gi alle kategoriene som inneholder strengekom. For eksempel komedie, romantisk komedie. | |
. | Den punktum (.) Metategn brukes til å matche ethvert enkelt tegn i unntak for en ny linje. | VELG * FRA filmer HVOR `year_released` REGEXP '200.'; vil gi alle filmene som er utgitt i årene som begynner med karakterene "200" etterfulgt av en enkelt karakter. For eksempel, 2005,2007,2008 etc. | |
[abc] | Den charlist [abc] anvendes til å tilpasse en hvilken som helst av de vedlagte figurene. | VELG * FRA `filmer` HVOR` tittel` REGEXP '[vwxyz]'; vil gi alle filmene som inneholder et enkelt tegn i "vwxyz". For eksempel X-Men, Da Vinci Code, etc. | |
[abc] | Den charlist [abc] brukes til å matche noen tegn unntatt de som er vedlagt. | VELG * FRA `filmer` HVOR` tittel` REGEXP '[vwxyz]'; vil gi alle filmene som inneholder andre tegn enn de i "vwxyz". | |
[AZ] | Den [AZ] brukes til å matche noen stor bokstav. | VELG * FRA `medlemmer` HVOR` postal_adresse` REGEXP '[AZ]'; vil gi alle medlemmene som har postadresse som inneholder et tegn fra A til Å ... For eksempel, Janet Jones med medlemsnummer 1. | |
[az] | Den [a] brukes til å matche ethvert bokstav | VELG * FRA `medlemmer` HVOR` postal_adresse` REGEXP '[az]'; vil gi alle medlemmene som har postadresser som inneholder tegn fra a til z ... For eksempel, Janet Jones med medlemsnummer 1. | |
[0-9] | Den [0-9] brukes til å matche ethvert tall fra 0 til 9. | VELG * FRA `medlemmer` HVOR` kontakt_nummer` REGEXP '[0-9]' vil gi alle medlemmene har sendt kontaktnumre som inneholder tegnene "[0-9]". F.eks. Robert Phil. | |
^ | Den caret (^) blir brukt til å starte kampen på begynnelsen. | VELG * FRA `filmer` HVOR` tittel` REGEXP '[cd]'; gir alle filmene med tittelen som begynner med noen av tegnene i "cd". For eksempel, Code Name Black, Daddy's Little Girls og Da Vinci Code. | |
| | Den vertikale linjen (|) brukes til å isolere alternativer. | VELG * FRA `filmer` HVOR` tittel` REGEXP '[cd] | [u]'; gir alle filmene med tittelen som begynner med noen av tegnene i "cd" eller "u". For eksempel, Code Name Black, Daddy's Little Girl, Da Vinci Code og Underworld - Awakening. | |
[[: <:]] | Den [[: <:]] matcher begynnelsen av ord. | VELG * FRA `filmer` HVOR` tittel` REGEXP '[[: <:]] for'; gir alle filmene med titler som starter med karakterene. For eksempel: Glemme Sarah Marshal. | |
[[:>:]] | Den [[:>:]] samsvarer med enden av ord. | VELG * FRA `filmer` HVOR` tittel` REGEXP 'ack [[:>:]]'; gir alle filmene med titler som slutter med karakterene "ack". For eksempel, Code Name Black. | |
[:klasse:] | Den [: Klasse:] matcher et tegn klasse altså [: alpha:] å matche bokstaver, [: plass:] for å matche tomrom, [: punct:] er kamp punctuations og [: upper:] for overklasse bokstaver. | VELG * FRA `filmer` HVOR` tittel` REGEXP '[: alpha:]'; gir alle filmene med titler bare bokstaver. For eksempel, å glemme Sarah Marshal, X-Men etc. Film som Pirates of the Caribbean 4 vil bli utelatt av dette spørsmålet. |
Backslash (\) brukes til å være en fluktfigur. Hvis vi ønsker å bruke det som en del av mønsteret i et vanlig uttrykk, bør vi bruke dobbel tilbakeslag (\\)
Sammendrag
- Regulære uttrykk gir et kraftig og fleksibelt mønstermatch som kan hjelpe oss med å implementere kraftsøkverktøy for databasesystemene våre.
- REGEXP er operatøren som brukes når du utfører samsvar med vanlige uttrykksmønstre. RLIKE er synonymet
- Regulære uttrykk støtter en rekke metategn som gir mer fleksibilitet og kontroll når du utfører mønsterkamper.
- Backslash brukes som en fluktfigur i regulære uttrykk. Det blir bare vurdert i mønsterkampen hvis dobbel tilbakeslag har brukt.
- Vanlige uttrykk er ikke mellom store og små bokstaver.