MYSQL regulære uttrykk (REGEXP) med syntaks og eksempler

Hva er regulære uttrykk?

Regulære uttrykk hjelper søkedata som samsvarer med komplekse kriterier. Vi så på jokertegn i den forrige opplæringen. Hvis du har jobbet med jokertegn før, spør du kanskje hvorfor du lærer regulære uttrykk når du kan få lignende resultater ved å bruke jokertegnene. Fordi, sammenlignet med jokertegn, lar regulære uttrykk oss søke etter data som samsvarer med enda mer komplekse kriterier.

Grunnleggende syntaks

Den grunnleggende syntaksen for et regulært uttrykk er som følger

SELECT statements... WHERE fieldname REGEXP 'pattern';

HER –

  • "VELG utsagn..." er standarden SELECT-setning
  • "HVOR feltnavn" er navnet på kolonnen som det regulære uttrykket skal utføres på.
  • "REGEXP 'mønster'" REGEXP er operatøren for regulære uttrykk og 'mønster' representerer mønsteret som skal matches av REGEXP. RLIKE er den synonym for REGEXP og oppnår samme resultater 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 har ordkoden i seg. Det spiller ingen rolle om "koden" er i begynnelsen, midten eller slutten av tittelen. Så lenge det er inneholdt i tittelen, vil det bli vurdert.

La oss anta at vi ønsker å søke etter filmer som starter med a, b, c eller d , etterfulgt av et hvilket som helst antall andre karakterer, hvordan skal vi gå frem for å oppnå det. Vi kan bruke et regulært uttrykk sammen med metategnene for å oppnå ønskede resultater.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Utfører 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 regulære uttrykk som er ansvarlig for resultatet ovenfor.

'^[abcd]' merket (^) betyr at mønstermatchen skal brukes i begynnelsen og charlist [abcd] betyr at kun filmtitler som starter med a, b, c eller d returneres i vårt resultatsett.

La oss endre skriptet ovenfor og bruke NOT charlist og se hvilke resultater vi får etter å ha utført søket vårt.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Utfører 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 regulære uttrykk som er ansvarlig for resultatene ovenfor.

'^[^abcd]' merket (^) betyr at mønstertilpasningen skal brukes i begynnelsen og charlist [^abcd] betyr at filmtitlene som starter med noen av de vedlagte karakterene er ekskludert fra resultatsettet.

Vanlige uttrykksmetategn

Det vi så på i eksemplet ovenfor er den enkleste formen for et regulært uttrykk. La oss nå se på mer avanserte mønstertreff med regulære uttrykk. Anta at vi ønsker å søke etter filmtitler som starter med mønsteret "kode" bare ved å bruke et regulært uttrykk, hvordan ville vi gå frem? Svaret er metakarakterer. De lar oss finjustere mønstersøkeresultatene våre ved å bruke regulære uttrykk.

chariot Tekniske beskrivelser Eksempel
* Ocuco stjerne (*) metategn brukes til å matche null (0) eller flere forekomster av strengene foran VELG * FRA filmer WHERE tittel REGEXP 'da*'; vil gi alle filmer som inneholder karakterer "da". For eksempel Da Vinci-koden, Daddy's Little Girls.
+ Ocuco pluss (+) metategn brukes til å matche en eller flere forekomster av strenger foran. VELG * FRA `movies` WHERE `title` REGEXP 'mon+'; vil gi alle filmer som inneholder karakterer "mon" .For eksempel engler og demoner.
? Spørsmålet(?) metategn brukes til å matche null (0) eller én forekomst av strengene foran. SELECT * FRA `categories` WHERE `category_name` REGEXP 'com?'; vil gi alle kategoriene som inneholder string com .For eksempel komedie , romantisk komedie .
. Ocuco prikk (.) metategn brukes til å matche et enkelt tegn med unntak av en ny linje. VELG * FRA filmer WHERE `year_released` REGEXP '200.'; vil gi alle filmene utgitt i årene som starter med tegnene "200" etterfulgt av en enkelt karakter. For eksempel 2005,2007,2008, XNUMX, XNUMX osv.
[abc] Ocuco charlist [abc] brukes til å matche alle de vedlagte tegnene. SELECT * FRA `movies` WHERE `title` REGEXP '[vwxyz]'; vil gi alle filmene som inneholder en enkelt karakter i "vwxyz". For eksempel X-Men, Da Vinci Code, etc.
[^abc] Ocuco charlist [^abc] brukes til å matche alle tegn unntatt de vedlagte. SELECT * FRA `movies` WHERE `title` REGEXP '^[^vwxyz]'; vil gi alle filmene som inneholder andre karakterer enn de i "vwxyz".
[AZ] Ocuco [AZ] brukes til å matche enhver stor bokstav. SELECT * FRA `members` WHERE `postal_address` REGEXP '[AZ]'; vil gi alle medlemmene som har postadresse som inneholder et hvilket som helst tegn fra A til Å. .For eksempel Janet Jones med medlemsnummer 1.
[az] Ocuco [az] brukes til å matche alle små bokstaver SELECT * FRA `members` WHERE `postal_address` REGEXP '[az]'; vil gi alle medlemmene som har postadresser som inneholder et hvilket som helst tegn fra a til å. .For eksempel Janet Jones med medlemsnummer 1.
[0-9] Ocuco [0-9] brukes til å matche et hvilket som helst siffer fra 0 til 9. VELG * FRA `medlemmer` HVOR `contact_number` REGEXP '[0-9]' vil gi alle medlemmene som har sendt inn kontaktnumre som inneholder tegnene "[0-9]". For eksempel Robert Phil.
^ Ocuco caret (^) brukes til å starte kampen ved begynnelsen. SELECT * FRA `movies` WHERE `title` REGEXP '^[cd]'; gir alle filmene med tittelen som starter med hvilken som helst av karakterene i "cd". For eksempel Code Name Black, Daddy's Little Girls og Da Vinci Code.
| Ocuco vertikal strek (|) brukes til å isolere alternativer. SELECT * FRA `movies` WHERE `title` REGEXP '^[cd]|^[u]'; gir alle filmene med tittelen som starter med hvilken som helst av karakterene i "cd" eller "u". For eksempel Code Name Black, Daddy's Little Girl, Da Vinci Code og Underworld – Awakening.
[[:<:]] Ocuco[[:<:]] samsvarer med begynnelsen av ordene. SELECT * FRA `movies` WHERE `title` REGEXP '[[:<:]]for';

gir alle filmene med titler som begynner med karakterene. For eksempel: Å glemme Sarah Marshal.

[[:>:]] Ocuco [[:>:]] samsvarer med slutten av ordene. SELECT * FRA `movies` WHERE `title` REGEXP 'ack[[:>:]]';

gir alle filmene med titler som slutter med karakterene "ack"

.For eksempel kodenavn svart.

[:klasse:] Ocuco [:klasse:] samsvarer med en karakterklasse, dvs

[:alfa:] å matche bokstaver, [:rom:] for å matche mellomrom, [:punct:] er samsvar mellom tegnsetting og [:upper:] for overklassebokstaver.

SELECT * FRA `movies` WHERE `title` REGEXP '[:alpha:]';

gir alle filmene med titler kun bokstaver

.For eksempel glemmer Sarah Marshal, X-Men osv.

Film som Pirates of the Caribbean 4 vil bli utelatt av denne spørringen.

Omvendt skråstrek (\) brukes til som et escape-tegn. Hvis vi vil bruke det som en del av mønsteret i et regulært uttrykk, bør vi bruke doble skråstreker (\\)

Sammendrag

  • Regulære uttrykk gir en kraftig og fleksibel mønstermatch som kan hjelpe oss med å implementere kraftsøkeverktøy for databasesystemene våre.
  • REGEXP er operatoren som brukes når du utfører samsvar med regulære uttrykksmønster. RLIKE er synonymet
  • Regelmessige uttrykk støtter en rekke metategn som gir mer fleksibilitet og kontroll når du utfører mønstertreff.
  • Omvendt skråstrek brukes som et escape-tegn i regulære uttrykk. Det vurderes kun i mønstermatchen hvis det er brukt doble skråstreker.
  • Vanlige uttrykk skiller ikke mellom store og små bokstaver.