I MariaDB er REGEXP_INSTR()
funktion returnerer startindekset for en understreng, der matcher det regulære udtryksmønster.
Indekset starter ved 1
. Hvis der ikke er noget match, er resultatet 0
.
Syntaks
Syntaksen ser sådan ud:
REGEXP_INSTR(subject, pattern)
Hvor emne
er inputstrengen og mønsteret
er det regulære udtryksmønster for understrengen.
Bemærk, at i skrivende stund MariaDBs version af REGEXP_INSTR()
accepterer færre argumenter end MySQL's REGEXP_INSTR()
. MySQLs version giver dig mulighed for at give argumenter for søgningens startposition, hvilken forekomst du skal søge efter, hvilken type position du skal returnere, samt en måde at forfine det regulære udtryk på.
Eksempel
Her er et grundlæggende eksempel:
SELECT REGEXP_INSTR('Cat', 'at');
Resultat:
+---------------------------+ | REGEXP_INSTR('Cat', 'at') | +---------------------------+ | 2 | +---------------------------+
I dette tilfælde er der et match, og understrengen starter ved position 2.
Ingen match
Her er et eksempel, hvor der ikke er nogen match:
SELECT REGEXP_INSTR('Cat', '^at');
Resultat:
+----------------------------+ | REGEXP_INSTR('Cat', '^at') | +----------------------------+ | 0 | +----------------------------+
Der er ingen match, så resultatet er 0
. Der er ingen match, fordi jeg specificerede, at strengen skal starte med understrengen.
Lad os ændre det, så det gør det start med den understreng:
SELECT REGEXP_INSTR('at', '^at');
Resultat:
+---------------------------+ | REGEXP_INSTR('at', '^at') | +---------------------------+ | 1 | +---------------------------+
Skrivar og bogstaver
REGEXP_INSTR()
funktionen følger reglerne for store og små bogstaver for den effektive sortering. Matching udføres ufølsomt for store og små bogstaver for versal-ufølsomme sorteringer og store og små bogstaver for store og små bogstaver for store og små bogstaver for store og små bogstaver og for binære data.
Her er et eksempel:
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";
Resultat:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
Min standardsortering er ufølsom mellem store og små bogstaver. De to andre strenge blev tvunget til henholdsvis en versal-ufølsom sortering og store og små bogstaver.
Angivelse af en BINÆR streng skelner også mellem store og små bogstaver (se nedenfor).
Binære strenge
Som standard måles positionerne i tegn i stedet for bytes. Du kan dog caste et multi-byte tegnsæt til BINÆR
for at få offsets i bytes, hvis du har brug for det.
Eksempel:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";
Resultat:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
Ophavsretssymbolet bruger to bytes, og derfor får vi i dette eksempel resultatet 4
når du caster det til BINÆR
sammenlignet med 3
at vi får andet.
Bemærk dog, at du sender en BINÆR
streng påvirker også følsomheden for store og små bogstaver. Med BINÆR
strenge, er et stort bogstav anderledes end dets modstykke med små bogstaver:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";
Resultat:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Her søgte jeg efter små bogstaver c
i stedet for et stort bogstav og BINÆR
strengen matchede ikke.
Nul-argumenter
Sender null
da ethvert argument resulterer i null
:
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3";
Resultat:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Forkert antal argumenter
Sender det forkerte antal argumenter eller ingen argumenter, resulterer det i en fejl:
SELECT REGEXP_INSTR('Cat');
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'