In MariaDB, de REGEXP_INSTR()
functie retourneert de startindex van een subtekenreeks die overeenkomt met het patroon van de reguliere expressie.
De index begint bij 1
. Als er geen overeenkomst is, is het resultaat 0
.
Syntaxis
De syntaxis gaat als volgt:
REGEXP_INSTR(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_INSTR()
accepteert minder argumenten dan MySQL's REGEXP_INSTR()
. Met de versie van MySQL kunt u argumenten opgeven voor de startpositie van de zoekopdracht, naar welke gebeurtenis moet worden gezocht, welk type positie moet worden geretourneerd, evenals een manier om de reguliere expressie te verfijnen.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT REGEXP_INSTR('Cat', 'at');
Resultaat:
+---------------------------+ | REGEXP_INSTR('Cat', 'at') | +---------------------------+ | 2 | +---------------------------+
In dit geval is er een match en begint de substring op positie 2.
Geen overeenkomst
Hier is een voorbeeld waarbij er geen overeenkomst is:
SELECT REGEXP_INSTR('Cat', '^at');
Resultaat:
+----------------------------+ | REGEXP_INSTR('Cat', '^at') | +----------------------------+ | 0 | +----------------------------+
Er is geen overeenkomst, dus het resultaat is 0
. Er is geen overeenkomst omdat ik heb opgegeven dat de tekenreeks moet beginnen met de subtekenreeks.
Laten we het veranderen zodat het doet begin met die substring:
SELECT REGEXP_INSTR('at', '^at');
Resultaat:
+---------------------------+ | REGEXP_INSTR('at', '^at') | +---------------------------+ | 1 | +---------------------------+
Hoofdlettergevoeligheid
De REGEXP_INSTR()
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_INSTR('Cat', 'c') AS "My Default",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";
Resultaat:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
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
Standaard worden de posities gemeten in tekens in plaats van in bytes. U kunt echter een multi-byte tekenset casten naar BINARY
om offsets in bytes te krijgen als dat nodig is.
Voorbeeld:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";
Resultaat:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
Het copyright-symbool gebruikt twee bytes, en daarom krijgen we in dit voorbeeld een resultaat van 4
bij het casten naar BINARY
, vergeleken met 3
die we anders krijgen.
Houd er echter rekening mee dat het doorgeven van een BINARY
string heeft ook invloed op de hoofdlettergevoeligheid. Met BINARY
strings, is een hoofdletter anders dan zijn tegenhanger in kleine letters:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";
Resultaat:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Hier zocht ik naar een kleine letter c
in plaats van een hoofdletter, en de BINARY
tekenreeks kwam niet overeen.
Nullargumenten
Doorgeven van null
aangezien elk argument resulteert in null
:
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(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_INSTR('Cat');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'