sql >> Database teknologi >  >> RDS >> Mysql

MySQL REGEXP eksempler

I MySQL er REGEXP operator bruges til at bestemme, om en streng matcher et regulært udtryk. Det er et synonym for REGEXP_LIKE() .

Hvis strengen matcher det angivne regulære udtryk, er resultatet 1 , ellers er det 0 .

Syntaks

Syntaksen ser sådan ud:

expr REGEXP pat

Hvor expr er inputstrengen og pat er det regulære udtryk, som du tester strengen for.

Eksempel 1 – Grundlæggende regulært udtryk

Det mest grundlæggende regulære udtryk, vi kan bruge, er et, der ikke har nogen specielle tegn i sig. Her bruger vi bare en snor. Hvis en del af inputstrengen matcher denne streng, returnerer den et match.

VÆLG 'Corn' REGEXP 'Corn' AS 'Corn', 'Acorn' REGEXP 'Corn' AS 'Acorn', 'Corner' REGEXP 'Corn' AS 'Corner', 'Cheese' REGEXP 'Corn' AS 'Cheese ';

Resultat:

+------+-------+--------+--------+| Majs | Acorn | Hjørne | Ost |+------+-------+--------+--------+| 1 | 1 | 1 | 0 |+------+-------+--------+--------+

Eksempel 2 – Match begyndelsen af ​​en streng

I dette eksempel angiver det regulære udtryk, at strengen skal begynde med Co .

VÆLG 'Corn' REGEXP '^Co' AS 'Corn', 'Acorn' REGEXP '^Co' AS 'Acorn', 'Cheese' REGEXP '^Co' AS 'Cheese';

Resultat:

+------+-------+--------+| Majs | Acorn | Ost |+------+-------+--------+| 1 | 0 | 0 |+------+-------+--------+

Eksempel 3 – Match slutningen af ​​en streng

I dette eksempel angiver det regulære udtryk, at strengen skal slutte med rn .

VÆLG 'Corn' REGEXP 'rn$' SOM 'Corn', 'Acorn' REGEXP 'rn$' AS 'Acorn', 'Cheese' REGEXP 'rn$' AS 'Cheese';

Resultat:

+------+-------+--------+| Majs | Acorn | Ost |+------+-------+--------+| 1 | 1 | 0 |+------+-------+--------+

Eksempel 4 – Match enhver karakter

. tegn matcher ethvert tegn.

VÆLG 'Corn' REGEXP '.' SOM 'Majs', 'Ost' REGEXP '.' SOM 'Ost', '' REGEXP '.' SOM '';

Resultat:

+------+--------+---+| Majs | Ost | |+------+--------+---+| 1 | 1 | 0 |+------+--------+---+

Dette tegn bruges typisk sammen med andre tegn til at specificere yderligere kriterier. For eksempel:

VÆLG 'Corn' REGEXP '^C.rn$' SOM 'Corn', 'Crn' REGEXP '^C.rn$' AS 'Crn';

Resultat:

+------+-----+| Majs | Crn |+------+-----+| 1 | 0 |+------+-----+

Her angiver vi, at strengen skal starte med C , at det skal efterfølges af et tegn (et hvilket som helst tegn), og at det skal slutte med rn .

Bemærk, at dette tegn angiver en enkelt forekomst af tegnet. Hvis du ønsker at angive flere forekomster (for eksempel ee i stedet for blot e ), skal du tilføje mere . tegn.

VÆLG 'Tweet' REGEXP '^Tw..t$' SOM 'Tweet', 'Tweat' REGEXP '^Tw..t$' SOM 'Tweat', 'Tweet' REGEXP '^Tw.t$' AS 'Tweet', 'Twit' REGEXP '^Tw..t$' AS 'Twit';

Resultat:

+-------+-------+-------+------+| Tweet | Tweat | Tweet | Twit |+-------+-------+-------+------+| 1 | 1 | 0 | 0 |+-------+-------+-------+------+

En anden måde at gøre dette på er at angive antallet af forekomster inden for krøllede parenteser:

VÆLG 'Tweet' REGEXP '^Tw.{2}t$' SOM 'Tweet', 'Tweat' REGEXP '^Tw.{2}t$' SOM 'Tweat', 'Tweet' REGEXP '^Tw. {1}t$' AS 'Tweet', 'Twit' REGEXP '^Tw.{2}t$' AS 'Twit';

Resultat:

+-------+-------+-------+------+| Tweet | Tweat | Tweet | Twit |+-------+-------+-------+------+| 1 | 1 | 0 | 0 |+-------+-------+-------+------+

Men hvis du kender det tegn, du leder efter, kan du angive dette tegn (i stedet for . tegn), som vist i følgende eksempel.

Eksempel 5 – Match nul eller flere forekomster af en bestemt karakter

Vi kan gøre følgende for at angive nul eller flere forekomster af e tegn:

VÆLG 'Twet' REGEXP '^Twe*t$' AS 'Twet', 'Tweet' REGEXP '^Twe*t$' SOM 'Tweet', 'Tweeet' REGEXP '^Twe*t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe*t$' AS 'Twt', 'Twit' REGEXP '^Twe*t$' AS 'Twit', 'Twiet' REGEXP '^Twe*t$' AS 'Twiet', 'Tweit' REGEXP '^Twe*t$' AS 'Tweit';

Resultat:

+------+-------+--------+-----+------+-------+- ------+| Twet | Tweet | Tweet | Twt | Twit | Tweet | Tweet |+------+--------+--------+-----+-------+-------+-- -----+| 1 | 1 | 1 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

De første fire matcher, men de sidste tre gør det ikke.

Eksempel 6 – Match en eller flere forekomster af en specifik karakter

Vi kan ændre det foregående eksempel, så vi kun får et match, hvis en eller flere tegn er fundet (det forrige eksempel returnerede et match, hvis nul). eller flere blev fundet). For at gøre dette bruger vi blot + i stedet for * :

VÆLG 'Twet' REGEXP '^Twe+t$' AS 'Twet', 'Tweet' REGEXP '^Twe+t$' SOM 'Tweet', 'Tweeet' REGEXP '^Twe+t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe+t$' AS 'Twt', 'Twit' REGEXP '^Twe+t$' AS 'Twit', 'Twiet' REGEXP '^Twe+t$' AS 'Twiet', 'Tweit' REGEXP '^Twe+t$' AS 'Tweit';

Resultat:

+------+-------+--------+-----+------+-------+- ------+| Twet | Tweet | Tweet | Twt | Twit | Tweet | Tweet |+------+--------+--------+-----+-------+-------+-- -----+| 1 | 1 | 1 | 0 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

I dette tilfælde returnerer det fjerde ord et andet resultat end det foregående eksempel.

Eksempel 7 – Match nul eller én forekomst af en bestemt karakter

Vi kan ændre det foregående eksempel, så vi kun får et match på nul eller et af de ønskede tegn. For at gøre dette bruger vi ? :

VÆLG 'Twet' REGEXP '^Twe?t$' AS 'Twet', 'Tweet' REGEXP '^Twe?t$' AS 'Tweet', 'Tweeet' REGEXP '^Twe?t$' SOM 'Tweeet' ', 'Twt' REGEXP '^Twe?t$' AS 'Twt', 'Twit' REGEXP '^Twe?t$' AS 'Twit', 'Twiet' REGEXP '^Twe?t$' AS 'Twiet', 'Tweit' REGEXP '^Twe?t$' AS 'Tweit';

Resultat:

+------+-------+--------+-----+------+-------+- ------+| Twet | Tweet | Tweet | Twt | Twit | Tweet | Tweet |+------+--------+--------+-----+-------+-------+-- -----+| 1 | 0 | 0 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Eksempel 8 – Skift

Du kan bruge | tegn, der matcher en eller anden sekvens af tegn:

VÆLG 'Tweet' REGEXP 'Tw|et' AS 'Tweet', 'For Let' REGEXP 'Tw|et' AS 'For Let', 'Banana' REGEXP 'Tw|et' AS 'Banana'; 

Resultat:

+-------+---------+--------+| Tweet | Til Lad | Banan |+-------+--------+--------+| 1 | 1 | 0 |+-------+---------+--------+

Her er et andet eksempel, hvor jeg søger efter hele ord:

VÆLG 'Kat' REGEXP 'Kat|Hund' AS 'Kat', 'Hund' REGEXP 'Kat|Hund' AS 'Hund', 'Hunde' REGEXP 'Kat|Hund' AS 'Doggone', 'Banan' REGEXP 'Cat|Dog' AS 'Banana';

Resultat:

+-----+-----+---------+--------+| Kat | Hund | Doggone | Banan |+-----+-----+---------+--------+| 1 | 1 | 1 | 0 |+-----+-----+---------+--------+

Vi får stadig et match, selvom vores regulære udtryk kun matcher en del af strengen.

Eksempel 9 – Match nul eller flere forekomster af en sekvens

Du kan bruge parenteser sammen med stjernen ()* for at angive nul eller flere forekomster af en sekvens:

VÆLG 'Banana' REGEXP '(an)*' AS 'Banana', 'Land' REGEXP '(an)*' AS 'Land', 'Cheese' REGEXP '(an)*' AS 'Cheese';

Resultat:

+--------+------+--------+| Banan | Land | Ost |+--------+------+--------+| 1 | 1 | 1 |+--------+------+--------+

Et andet eksempel:

VÆLG 'Banana' REGEXP '^B(an)*d$' AS 'Banana', 'Band' REGEXP '^B(an)*d$' AS 'Band', 'Bald' REGEXP '^B( an)*d$' AS 'Bald', 'Bad' REGEXP '^B(an)*d$' AS 'Dårlig';

Resultat:

+--------+------+------+-----+| Banan | Band | skaldet | Dårlig |+--------+------+------+-----+| 0 | 1 | 0 | 0 |+--------+------+------+-----+

Eksempel 10 – Gentagelse

Som set i et tidligere eksempel kan du bruge krøllede parenteser til at angive gentagelse. Denne notation giver en mere generel måde at skrive regulære udtryk på end nogle af de foregående eksempler:

VÆLG 'Tweeet' REGEXP 'e{3}' SOM 'Tweeet', 'Tweet' REGEXP 'e{3}' SOM 'Tweet';

Resultat:

+--------+-------+| Tweet | Tweet |+--------+------+| 1 | 0 |+--------+------+

Eksempel 11 – Rækkevidde

Du kan bruge bindestregen til at angive et område. Her er et eksempel, der specificerer en række tal:

VÆLG 'Tweet 123' REGEXP '[0-9]' SOM 'Tweet 123', 'Tweet ABC' REGEXP '[0-9]' SOM 'Tweet ABC';

Resultat:

+--------+-------+| Tweet | Tweet |+--------+------+| 1 | 0 |+--------+------+

Og det følgende eksempel angiver en række bogstaver:

VÆLG 'Tweet 123' REGEXP '[A-Z]' SOM 'Tweet 123', 'ABC' REGEXP '[A-Z]' SOM 'ABC', '123' REGEXP '[A-Z]' AS '123'; 

Resultat:

+--------+-------+| Tweet | Tweet |+--------+------+| 1 | 0 |+--------+------+

Her er, hvad der sker, hvis vi begrænser antallet af tal:

VÆLG '123' REGEXP '[1-3]' AS '123', '012' REGEXP '[1-3]' AS '012', '045' REGEXP '[1-3]' AS '045 ';

Resultat:

+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 1 | 1 | 0 |+-----+-----+-----+

Eksempel 12 – Ikke inden for et område

Vi kan bruge ^ tegn for at ændre det foregående eksempel, så det angivne antal tegn udelukkes:

VÆLG '123' REGEXP '[^1-3]' AS '123', '012' REGEXP '[^1-3]' AS '012', '045' REGEXP '[^1-3]' AS '045';

Resultat:

+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 0 | 1 | 1 |+-----+-----+-----+

Så vi får det modsatte resultat af det forrige eksempel.


  1. Få en kolonne fra .sqlite, der indeholder flere tabeller med flere kolonner

  2. Sådan automatiseres migrering fra Standalone MySQL til Galera Cluster ved hjælp af Ansible

  3. Hvordan kan jeg lave en primær nøgle som AUTOINCREMENT

  4. Svarer til Oracles eksterne tabeller i SQL Server