sql >> Databasteknik >  >> RDS >> Mysql

MySQL REGEXP-exempel

I MySQL, REGEXP operatorn används för att avgöra om en sträng matchar ett reguljärt uttryck eller inte. Det är en synonym för REGEXP_LIKE() .

Om strängen matchar det angivna reguljära uttrycket blir resultatet 1 , annars är det 0 .

Syntax

Syntaxen ser ut så här:

expr REGEXP pat

Där expr är inmatningssträngen och pat är det reguljära uttrycket som du testar strängen mot.

Exempel 1 – Grundläggande reguljärt uttryck

Det mest grundläggande reguljära uttrycket vi kan använda är ett som inte har några specialtecken. Här använder vi bara ett snöre. Om någon del av inmatningssträngen matchar den strängen, returnerar den en matchning.

VÄLJ 'Corn' REGEXP 'Corn' AS 'Corn', 'Ecorn' REGEXP 'Corn' AS 'Acorn', 'Corner' REGEXP 'Corn' AS 'Corner', 'Cheese' REGEXP 'Corn' AS 'Cheese ';

Resultat:

+------+-------+--------+--------+| Majs | Acorn | Hörn | Ost |+------+-------+--------+--------+| 1 | 1 | 1 | 0 |+------+-------+--------+--------+

Exempel 2 – Matcha början av en sträng

I det här exemplet anger det reguljära uttrycket att strängen måste börja med Co .

VÄLJ 'Corn' REGEXP '^Co' AS 'Corn', 'Acorn' REGEXP '^Co' AS 'Acorn', 'Cheese' REGEXP '^Co' AS 'Cheese';

Resultat:

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

Exempel 3 – Matcha slutet av en sträng

I det här exemplet anger det reguljära uttrycket att strängen måste sluta med rn .

VÄLJ 'Majs' REGEXP 'rn$' SOM 'Majs', 'Acorn' REGEXP 'rn$' SOM 'Acorn', 'Cheese' REGEXP 'rn$' SOM 'Ost';

Resultat:

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

Exempel 4 – Matcha vilken karaktär som helst

. tecken matchar alla tecken.

VÄLJ 'Corn' REGEXP '.' SOM 'Majs', 'Ost' REGEXP '.' SOM 'Ost', '' REGEXP '.' SOM '';

Resultat:

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

Detta tecken används vanligtvis tillsammans med andra tecken för att specificera ytterligare kriterier. Till exempel:

VÄLJ 'Corn' REGEXP '^C.rn$' AS 'Corn', 'Crn' REGEXP '^C.rn$' AS 'Crn';

Resultat:

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

Här anger vi att strängen måste börja med C , att det måste följas av ett tecken (valfritt tecken), och att det måste sluta med rn .

Observera att det här tecknet anger en enda instans av tecknet. Om du vill ange flera instanser (till exempel ee istället för bara e ), måste du lägga till fler . tecken.

VÄLJ '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 |+-------+-------+-------+------+

Ett annat sätt att göra detta är att ange antalet förekomster inom parentes:

VÄLJ '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 om du känner till tecknet du letar efter kan du ange det tecknet (istället för . tecken), som visas i följande exempel.

Exempel 5 – Matcha noll eller fler instanser av en specifik karaktär

Vi kan göra följande för att specificera noll eller fler instanser av e tecken:

VÄLJ '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 | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

De fyra första matchar men de tre sista gör det inte.

Exempel 6 – Matcha en eller flera instanser av en specifik karaktär

Vi kan modifiera föregående exempel så att vi bara får en matchning om en eller fler tecken hittas (föregående exempel returnerade en matchning om noll). eller fler hittades). För att göra detta använder vi helt enkelt + istället för * :

VÄLJ '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 | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 0 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

I det här fallet returnerar det fjärde ordet ett annat resultat än föregående exempel.

Exempel 7 – Matcha noll eller en instans av en specifik karaktär

Vi kan modifiera föregående exempel så att vi bara får en matchning på noll eller ett av de önskade tecknen. För att göra detta använder vi ? :

VÄLJ '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 | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 0 | 0 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Exempel 8 – Alternativ

Du kan använda | tecken för att matcha en eller annan teckensekvens:

VÄLJ 'Tweet' REGEXP 'Tw|et' AS 'Tweet', 'For Let' REGEXP 'Tw|et' AS 'For Let', 'Banana' REGEXP 'Tw|et' AS 'Banana'; 

Resultat:

+-------+---------+--------+| Tweet | För Låt | Banan |+-------+--------+--------+| 1 | 1 | 0 |+-------+---------+--------+

Här är ett annat exempel där jag söker efter hela ord:

VÄLJ 'Katt' REGEXP 'Katt|Hund' AS 'Katt', 'Hund' REGEXP 'Katt|Hund' AS 'Hund', 'Hund' REGEXP 'Katt|Hund' AS 'Hund', 'Banan' REGEXP 'Cat|Dog' AS 'Banana';

Resultat:

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

Vi får fortfarande en matchning även när vårt reguljära uttryck bara matchar en del av strängen.

Exempel 9 – Matcha noll eller fler instanser av en sekvens

Du kan använda parenteser tillsammans med asterisken ()* för att ange noll eller fler instanser av en sekvens:

VÄLJ 'Banana' REGEXP '(an)*' AS 'Banana', 'Land' REGEXP '(an)*' AS 'Land', 'Cheese' REGEXP '(an)*' AS 'Cheese';

Resultat:

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

Ett annat exempel:

VÄLJ '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 'Bad';

Resultat:

+--------+------+------+-----+| Banan | Band | Skallig | Dålig |+--------+------+------+-----+| 0 | 1 | 0 | 0 |+--------+------+------+-----+

Exempel 10 – Upprepning

Som sett i ett tidigare exempel kan du använda parenteser för att ange upprepning. Denna notation ger ett mer allmänt sätt att skriva reguljära uttryck än några av de tidigare exemplen:

VÄLJ 'Tweeet' REGEXP 'e{3}' SOM 'Tweeet', 'Tweet' REGEXP 'e{3}' SOM 'Tweet';

Resultat:

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

Exempel 11 – Räckvidd

Du kan använda bindestrecket för att ange ett intervall. Här är ett exempel som anger ett antal nummer:

VÄLJ 'Tweet 123' REGEXP '[0-9]' SOM 'Tweet 123', 'Tweet ABC' REGEXP '[0-9]' SOM 'Tweet ABC';

Resultat:

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

Och följande exempel specificerar ett antal bokstäver:

VÄLJ '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 |+--------+-------+

Så här händer om vi begränsar antalet siffror:

VÄLJ '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 |+-----+-----+-----+

Exempel 12 – Inte inom ett intervall

Vi kan använda ^ tecken för att ändra föregående exempel så att det angivna intervallet av tecken exkluderas:

VÄLJ '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 motsatta resultatet till föregående exempel.


  1. 2 sätt att få standardspråket för en inloggning i SQL Server (T-SQL)

  2. dynamisk sql-fråga i postgres

  3. SQL - Hur lagrar och navigerar man i hierarkier?

  4. Visar inte SQL noll-värden på en "not equals"-fråga?