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
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.