MYSQL Regular Expressions (REGEXP) med syntaks & Eksempler

Anonim

Hvad er regulære udtryk?

Regular Expressions hjælper med at søge i data, der matcher komplekse kriterier. Vi kiggede på jokertegn i den foregående vejledning. Hvis du har arbejdet med wildcards før, spørger du måske hvorfor lære regelmæssige udtryk, når du kan få lignende resultater ved hjælp af wildcards. Fordi, i forhold til jokertegn, giver regulære udtryk os mulighed for at søge i 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 -

  • "SELECT-sætninger ..." er standard-SELECT-sætningen
  • "HVOR feltnavn" er navnet på den kolonne, som det regulære udtryk skal udføres på.
  • "REGEXP 'mønster'" REGEXP er operatoren for regulært udtryk, og 'mønster' repræsenterer det mønster, der skal matches med REGEXP. RLIKE er synonymet 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 indeholder ordkoden. Det betyder ikke noget, om "koden" er i begyndelsen, midten eller slutningen af ​​titlen. Så længe det er indeholdt i titlen, vil det blive overvejet.

Lad os antage, at vi vil søge efter film, der starter med a, b, c eller d, efterfulgt af et vilkårligt antal andre tegn, hvordan vil vi gå for at opnå det. Vi kan bruge et regulært udtryk sammen med metategnene for at opnå vores ønskede resultater.

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

At udføre ovenstående script i MySQL-arbejdsbænk 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]' caret (^) betyder, at mønsterkampen skal anvendes i starten, og charlisten [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 IKKE charlisten og se, hvilke resultater vi får efter udførelsen af ​​vores forespørgsel.

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

At udføre ovenstående script i MySQL-arbejdsbænk 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]' caret (^) betyder, at mønsterkampen skal anvendes i begyndelsen, og charlisten [abcd] betyder, at filmtitler, der starter med et af de vedlagte tegn, er ekskluderet fra resultatsættet.

Metategn for regulært udtryk

Det, vi så på i ovenstående eksempel, er den enkleste form for et regulært udtryk. Lad os nu se på mere avancerede matches med regulært udtryk. Antag, at vi kun vil søge på filmtitler, der starter med mønsteret "kode" ved hjælp af et regulært udtryk. Hvordan ville vi gå frem til det? Svaret er metategn. De giver os mulighed for at finjustere vores søgeresultater ved hjælp af regulære udtryk.

Char Beskrivelse Eksempel
* Den stjerne (*) metategn bruges til at matche nul (0) eller flere forekomster af strengene foregående det VÆLG * FRA film, HVOR titlen REGEXP 'da *'; vil give alle film, der indeholder tegn "da". F.eks. Da Vinci-koden, farens små piger.
+ Den plus (+) metategn bruges til at matche en eller flere forekomster af strenge forud den. VÆLG * FRA `film` HVOR` titel` REGEXP 'mon +'; vil give alle film, der indeholder tegn "mon". For eksempel, Engle og dæmoner.
? Spørgsmålet (?) Metakarakter bruges til at matche nul (0) eller en forekomst af strengene forud for den. VÆLG * FRA `kategorier` HVOR` kategori_navn` REGEXP 'com?'; vil give alle kategorier, der indeholder string com. For eksempel komedie, romantisk komedie.
. Den prik (.) Metategn bruges til at matche et enkelt tegn i undtagelse af en ny linje. VÆLG * FRA film, HVOR `year_released` REGEXP '200.'; vil give alle de film, der er udgivet i årene startende med tegnene "200" efterfulgt af en hvilken som helst enkelt karakter. F.eks. 2005,2007,2008 osv.
[abc] Den charlist [abc] bruges til at matche nogen af de vedlagte figurer. VÆLG * FRA `film` HVOR` titel` REGEXP '[vwxyz]'; vil give alle de film, der indeholder et enkelt tegn i "vwxyz". F.eks. X-Men, Da Vinci-koden osv.
[abc] Den charlist [abc] bruges til at matche alle tegn bortset dem lukkede. VÆLG * FRA `film` HVOR` titel` REGEXP '[vwxyz]'; vil give alle de film, der indeholder andre tegn end dem i "vwxyz".
[AZ] Den [AZ] bruges til at matche enhver stort bogstav. VÆLG * FRA `medlemmer` HVOR` postal_adresse` REGEXP '[AZ]'; vil give alle de medlemmer, der har postadresse, der indeholder et tegn fra A til Z ... F.eks. Janet Jones med medlemsnummer 1.
[az] Den [az] bruges til at matche enhver lille bogstav VÆLG * FRA `medlemmer` HVOR` postal_adresse` REGEXP '[az]'; vil give alle de medlemmer, der har postadresser, der indeholder et hvilket som helst tegn fra a til z ... F.eks. Janet Jones med medlemsnummer 1.
[0-9] Den [0-9] bruges til at matche nogen tal mellem 0 og 9. VÆLG * FRA `medlemmer` HVOR` kontakt_nummer` REGEXP '[0-9]' vil give alle medlemmerne har indsendt kontaktnumre indeholdende tegn "[0-9]". F.eks. Robert Phil.
^ Den karet (^) bruges til at starte kampen på begyndelsen. VÆLG * FRA `film` HVOR` titel` REGEXP '[cd]'; giver alle film med titlen startende med et hvilket som helst af tegnene i "cd". F.eks. Kodenavn sort, Daddy's Little Girls og Da Vinci Code.
| Den lodrette bjælke (|) bruges til at isolere alternativer. VÆLG * FRA `film` HVOR` titel` REGEXP '[cd] | [u]'; giver alle film med titlen startende med et hvilket som helst af tegnene i "cd" eller "u". F.eks. Kodenavn sort, Daddy's Little Girl, Da Vinci Code og Underworld - Awakening.
[[: <:]] Den [[: <:]] matcher begyndelsen af ord. VÆLG * FRA `film` HVOR` titel` REGEXP '[[: <:]] for'; giver alle film med titler, der starter med tegnene. For eksempel: Glemmer Sarah Marshal.
[[:>:]] Den [[:>:]] matcher slutningen af ord. VÆLG * FRA `film` HVOR` titel` REGEXP 'ack [[:>:]]'; giver alle film med titler, der slutter med tegnene "ack". F.eks. kodenavn sort.
[: klasse:] Den [: klasse:] matcher et tegn klasse dvs [: alpha:] for at matche breve, [: space:] til at matche hvide rum, [: PUNCT:] er match skilletegn og [: øvre:] til øverste klasse breve. VÆLG * FRA `film` HVOR` titel` 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.

Backslash (\) bruges til at være en escape-karakter. Hvis vi vil bruge det som en del af mønsteret i et regulært udtryk, skal vi bruge dobbelte tilbageslag (\\)

Resumé

  • Regulære udtryk giver et stærkt og fleksibelt mønstermatch, der kan hjælpe os med at implementere el-søgeværktøjer til vores databasesystemer.
  • REGEXP er den operatør, der bruges til at udføre matches med regulære udtryk. RLIKE er synonymet
  • Regulære udtryk understøtter et antal metategn, der giver mulighed for mere fleksibilitet og kontrol, når du udfører mønstermatch.
  • Backslash bruges som flugtkarakter i regulære udtryk. Det overvejes kun i mønsterkampen, hvis der er brugt dobbelt tilbageslag.
  • Regulære udtryk er ikke store og små bogstaver.