MYSQL Regular Expressions (REGEXP) med syntaks og amp; Eksempler

Anonim

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.