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.