MySQL har ett antal funktioner och operatorer som gör att vi kan utföra operationer med hjälp av reguljära uttryck (regex). Den här artikeln presenterar två operatorer och en funktion som gör att vi kan ta reda på om en sträng matchar ett reguljärt uttryck som specificeras av ett givet mönster.
Dessa regex-funktioner och operatorer är:
REGEXP_LIKE()
REGEXP
RLIKE
Dessa är alla i princip likvärdiga, eftersom operatorerna (de två andra) båda är synonymer till funktionen (den första). I vilket fall som helst kan du se exempel på alla tre i aktion nedan.
REGEXP_LIKE()
Funktion
Låt oss först titta på funktionen. Här är ett exempel på hur du kör en regex-sökning med REGEXP_LIKE()
funktion:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Resultat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Den första strängen matchar (eftersom den börjar med C ) så resultatet är 1
. Den andra strängen matchar inte, så resultatet är 0
.
Den här funktionen kan dock vara mycket mer användbar än att bara returnera en 1
eller 0
. Till exempel kan den läggas till i WHERE
klausul när du frågar efter en databas. I det här fallet kan vi få en lista med rader som innehåller en matchning för mönstret.
Här är ett exempel:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Här är hela tabellen:
SELECT AlbumId, AlbumName FROM Albums;
Resultat:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
REGEXP
Operatör
Så här gör du samma sak med REGEXP
operatör:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Resultat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Och databasexemplet:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Du kan också använda NOT REGEXP
för att returnera det motsatta resultatet.
RLIKE
Operatör
Och här använder den RLIKE
:
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Resultat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Och databasexemplet:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
I det här fallet bytte jag helt enkelt REGEXP
för RLIKE
och lämnade resten av koden ifred.
Du kan också använda NOT RLIKE
för att returnera det motsatta resultatet.
Fler REGEX-funktioner
MySQL innehåller också några andra regex-funktioner och operatorer. Tre av dessa listas nedan. Tekniskt sett kan du också använda de två första för att "upptäcka" om en sträng matchar ett regexmönster (i vilket fall kanske den här artikeln borde ha titeln "5 sätt att upptäcka om en sträng matchar ett reguljärt uttryck i MySQL" istället för bara " 3 sätt...").
Hur som helst, här är ytterligare tre regex-funktioner:
- Du kan använda
REGEXP_INSTR()
funktion för att returnera startindexet för en delsträng som matchar det reguljära uttrycksmönstret. REGEXP_SUBSTR()
funktion returnerar delsträngen som matchar det givna reguljära uttrycksmönstret.- Och
REGEXP_REPLACE()
funktion ersätter förekomster av delsträngen i en sträng som matchar det givna reguljära uttrycksmönstret.