In MariaDB, de REGEXP_SUBSTR()
functie retourneert de subtekenreeks die overeenkomt met het gegeven patroon voor reguliere expressies.
Als er geen overeenkomst is (d.w.z. de invoertekenreeks bevat de subtekenreeks niet), is het resultaat een lege tekenreeks.
Syntaxis
De syntaxis gaat als volgt:
REGEXP_SUBSTR(subject,pattern)
Waar subject
is de invoerreeks en pattern
is het reguliere expressiepatroon voor de subtekenreeks.
Merk op dat, op het moment van schrijven, MariaDB's versie van REGEXP_SUBSTR()
accepteert minder argumenten dan MySQL's REGEXP_SUBSTR()
. Met de versie van MySQL kunt u argumenten opgeven voor de startpositie van de zoekopdracht, naar welke instantie moet worden gezocht, evenals een manier om de reguliere expressie te verfijnen.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
Resultaat:
+--------------------------------------------+ | REGEXP_SUBSTR('Thailand and Laos', 'l.nd') | +--------------------------------------------+ | land | +--------------------------------------------+
In dit geval is er een overeenkomst en wordt de subtekenreeks geretourneerd.
Meerdere wedstrijden
Als er meerdere overeenkomsten in de tekenreeks zijn, wordt standaard de eerste geretourneerd:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Resultaat:
+----------------------------------------+ | REGEXP_SUBSTR('Lend for land', 'l.nd') | +----------------------------------------+ | Lend | +----------------------------------------+
Geen overeenkomst
Hier is een voorbeeld waarbij er geen overeenkomst is:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Resultaat:
+--------------------------------------+ | REGEXP_SUBSTR('Lend for land', '^C') | +--------------------------------------+ | | +--------------------------------------+
Er is geen overeenkomst, dus het resultaat is een lege tekenreeks.
Hoofdlettergevoeligheid
De REGEXP_SUBSTR()
functie volgt de hoofdlettergevoeligheidsregels van de effectieve sortering. Het matchen wordt hoofdletterongevoelig uitgevoerd voor hoofdletterongevoelige sorteringen en hoofdlettergevoelig voor hoofdlettergevoelige sorteringen en voor binaire gegevens.
Hier is een voorbeeld:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "My Default",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive";
Resultaat:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | Cat | Cat | | +------------+------------------+----------------+
Mijn standaardsortering is niet hoofdlettergevoelig. De andere twee strings werden gedwongen om respectievelijk hoofdlettergevoelig en hoofdlettergevoelig te sorteren.
Het verstrekken van een BINARY
string is ook hoofdlettergevoelig (zie hieronder).
Binaire strings
Een BINARY
doorgeven string heeft ook invloed op de hoofdlettergevoeligheid. Met BINARY
strings, is een hoofdletter anders dan zijn tegenhanger in kleine letters:
Voorbeeld:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Resultaat:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | | +-----------+--------+
Dit is wat er gebeurt als we de zaak wijzigen:
SELECT
REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Resultaat:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | Cat | +-----------+--------+
Nullargumenten
Doorgeven van null
aangezien elk argument resulteert in null
:
SELECT
REGEXP_SUBSTR(null, 'c.t') AS "1",
REGEXP_SUBSTR('Cat', null) AS "2",
REGEXP_SUBSTR(null, null) AS "3";
Resultaat:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Onjuist aantal argumenten
Het doorgeven van het verkeerde aantal argumenten of geen argumenten, resulteert in een fout:
SELECT REGEXP_SUBSTR('Cat');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_SUBSTR'