MySQL heeft een aantal functies en operators waarmee we bewerkingen kunnen uitvoeren met behulp van reguliere expressies (regex). Dit artikel presenteert twee operators en één functie waarmee we kunnen achterhalen of een tekenreeks overeenkomt met een reguliere expressie die is gespecificeerd door een bepaald patroon.
Deze regexfuncties en operators zijn:
REGEXP_LIKE()
REGEXP
RLIKE
Deze zijn in principe allemaal equivalent, aangezien de operatoren (de tweede twee) beide synoniemen zijn van de functie (de eerste). In ieder geval zie je hieronder voorbeelden van alle drie in actie.
De REGEXP_LIKE()
Functie
Laten we eerst eens kijken naar de functie. Hier is een voorbeeld van het uitvoeren van een regex-zoekopdracht met de REGEXP_LIKE()
functie:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Resultaat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
De eerste tekenreeks komt overeen (omdat deze begint met C ) dus het resultaat is 1
. De tweede string komt niet overeen en dus is het resultaat 0
.
Deze functie kan echter veel nuttiger zijn dan het simpelweg retourneren van een 1
of 0
. Het kan bijvoorbeeld worden toegevoegd aan de WHERE
clausule bij het opvragen van een database. In dit geval kunnen we een lijst met rijen krijgen die een overeenkomst voor het patroon bevatten.
Hier is een voorbeeld:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Resultaat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Hier is de volledige tabel:
SELECT AlbumId, AlbumName FROM Albums;
Resultaat:
+---------+--------------------------+ | 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 | +---------+--------------------------+
De REGEXP
Operator
Hier leest u hoe u hetzelfde doet met de REGEXP
operator:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Resultaat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
En het databasevoorbeeld:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Resultaat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
U kunt ook NOT REGEXP
. gebruiken om het tegenovergestelde resultaat te retourneren.
De RLIKE
Operator
En hier gebruikt het RLIKE
:
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Resultaat:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
En het databasevoorbeeld:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Resultaat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
In dit geval heb ik gewoon REGEXP
geruild voor RLIKE
en liet de rest van de code met rust.
Je kunt ook NOT RLIKE
. gebruiken om het tegenovergestelde resultaat te retourneren.
Meer REGEX-functies
MySQL bevat ook een paar andere regex-functies en -operators. Hieronder staan er drie genoemd. Technisch gezien zou je ook de eerste twee kunnen gebruiken om te "detecteren" of een string overeenkomt met een regex-patroon (in dat geval zou dit artikel misschien de titel moeten hebben "5 manieren om te detecteren of een string overeenkomt met een reguliere expressie in MySQL" in plaats van alleen " 3 manieren…”).
Hoe dan ook, hier zijn nog drie regex-functies:
- U kunt de
REGEXP_INSTR()
. gebruiken functie om de startindex van een subtekenreeks terug te geven die overeenkomt met het patroon van de reguliere expressie. - De
REGEXP_SUBSTR()
functie retourneert de subtekenreeks die overeenkomt met het gegeven patroon voor reguliere expressies. - En de
REGEXP_REPLACE()
functie vervangt de subtekenreeks binnen een tekenreeks die overeenkomt met het gegeven patroon voor reguliere expressies.