В MariaDB, REGEXP_INSTR()
функцията връща началния индекс на подниз, който съответства на шаблона на регулярния израз.
Индексът започва от 1
. Ако няма съвпадение, резултатът е 0
.
Синтаксис
Синтаксисът е така:
REGEXP_INSTR(subject, pattern)
Където subject
е входният низ и pattern
е шаблонът на регулярния израз за подниза.
Имайте предвид, че към момента на писане версията на MariaDB на REGEXP_INSTR()
приема по-малко аргументи от REGEXP_INSTR()
на MySQL . Версията на MySQL ви позволява да предоставите аргументи за началната позиция на търсенето, коя поява да търсите, кой тип позиция да върнете, както и начин за прецизиране на регулярния израз.
Пример
Ето един основен пример:
SELECT REGEXP_INSTR('Cat', 'at');
Резултат:
+---------------------------+ | REGEXP_INSTR('Cat', 'at') | +---------------------------+ | 2 | +---------------------------+
В този случай има съвпадение и поднизът започва от позиция 2.
Няма съвпадение
Ето пример, където няма съвпадение:
SELECT REGEXP_INSTR('Cat', '^at');
Резултат:
+----------------------------+ | REGEXP_INSTR('Cat', '^at') | +----------------------------+ | 0 | +----------------------------+
Няма съвпадение, така че резултатът е 0
. Няма съвпадение, защото посочих, че низът трябва да започва с подниз.
Нека го променим така, че да започнете с този подниз:
SELECT REGEXP_INSTR('at', '^at');
Резултат:
+---------------------------+ | REGEXP_INSTR('at', '^at') | +---------------------------+ | 1 | +---------------------------+
Чувствителност на регистрите
REGEXP_INSTR()
функцията следва правилата за чувствителност към малки и големи букви на ефективното съпоставяне. Съпоставянето се извършва независимо от главните и малки букви за съпоставянията без малки и големи букви и чувствителни към малките и малки букви за съпоставянията, чувствителни към малки и големи букви и за двоични данни.
Ето един пример:
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";
Резултат:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
Моето съпоставяне по подразбиране е независимо от главните букви. Другите два низа бяха принудени към съпоставяне, независимо от главни и малки букви, съответно.
Предоставяне на BINARY
низът също е чувствителен към малки и големи букви (вижте по-долу).
Двоични низове
По подразбиране позициите се измерват в знаци, а не в байтове. Въпреки това, можете да прехвърлите многобайтов набор от знаци към BINARY
за да получите измествания в байтове, ако е необходимо.
Пример:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";
Резултат:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
Символът за авторско право използва два байта и затова в този пример получаваме резултат от 4
когато го прехвърляте към BINARY
, в сравнение с 3
които получаваме иначе.
Въпреки че имайте предвид, че предаването на BINARY
низът също влияе на чувствителността на главните и малки букви. С BINARY
низове, символът с главни букви е различен от неговия аналог с малки букви:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";
Резултат:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Тук потърсих c
с малки букви вместо главни букви и BINARY
низът не съвпада.
Нулеви аргументи
Предаването на null
тъй като всеки аргумент води до null
:
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3";
Резултат:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Грешен брой аргументи
Предаването на грешен брой аргументи или липсата на аргументи води до грешка:
SELECT REGEXP_INSTR('Cat');
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'