MySQL har en række funktioner og operatorer, der giver os mulighed for at udføre operationer ved hjælp af regulære udtryk (regex). Denne artikel præsenterer to operatorer og en funktion, der gør det muligt for os at finde ud af, om en streng matcher et regulært udtryk specificeret af et givet mønster.
Disse regulære udtryksfunktioner og operatorer er:
REGEXP_LIKE()
REGEXP
RLIKE
Disse er alle grundlæggende ækvivalente, da operatorerne (de to andre) begge er synonymer for funktionen (den første). Under alle omstændigheder kan du se eksempler på alle tre i aktion nedenfor.
REGEXP_LIKE()
Funktion
Lad os først se på funktionen. Her er et eksempel på at køre en regex-søgning ved hjælp af 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ørste streng matcher (fordi den starter med C ), så resultatet er 1
. Den anden streng matcher ikke, så resultatet er 0
.
Denne funktion kan dog være meget mere nyttig end blot at returnere en 1
eller 0
. For eksempel kan det tilføjes til WHERE
klausul, når du forespørger i en database. I dette tilfælde kan vi få en liste over rækker, der indeholder et match til mønsteret.
Her er et eksempel:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Her er den fulde tabel:
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ådan gør du det samme ved at bruge REGEXP
operatør:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Resultat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Og databaseeksemplet:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Du kan også bruge NOT REGEXP
for at returnere det modsatte resultat.
RLIKE
Operatør
Og her bruger den RLIKE
:
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Resultat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Og databaseeksemplet:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
I dette tilfælde byttede jeg simpelthen REGEXP
for RLIKE
og lod resten af koden være i fred.
Du kan også bruge NOT RLIKE
for at returnere det modsatte resultat.
Flere REGEX-funktioner
MySQL indeholder også et par andre regex-funktioner og -operatorer. Tre af disse er anført nedenfor. Teknisk set kan du også bruge de to første til at "detektere", om en streng matcher et regex-mønster (i så fald bør denne artikel måske have titlen "5 måder at opdage, om en streng matcher et regulært udtryk i MySQL" i stedet for blot " 3 måder...").
I hvert fald, her er tre mere regex-funktioner:
- Du kan bruge
REGEXP_INSTR()
funktion for at returnere startindekset for en understreng, der matcher det regulære udtryksmønster. REGEXP_SUBSTR()
funktion returnerer den understreng, der matcher det givne regulære udtryksmønster.- Og
REGEXP_REPLACE()
funktion erstatter forekomster af understrengen i en streng, der matcher det givne regulære udtryksmønster.