В MariaDB, REGEXP_SUBSTR()
функцията връща подниз, който съответства на дадения модел на регулярен израз.
Ако няма съвпадение (т.е. входният низ не съдържа подниза), резултатът е празен низ.
Синтаксис
Синтаксисът е така:
REGEXP_SUBSTR(subject,pattern)
Където subject
е входният низ и pattern
е шаблонът на регулярния израз за подниза.
Имайте предвид, че към момента на писане версията на MariaDB на REGEXP_SUBSTR()
приема по-малко аргументи от REGEXP_SUBSTR()
на MySQL . Версията на MySQL ви позволява да предоставите аргументи за началната позиция на търсенето, коя поява да търсите, както и начин за прецизиране на регулярния израз.
Пример
Ето един основен пример:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
Резултат:
+----------------------------------------------+| REGEXP_SUBSTR('Тайланд и Лаос', 'l.nd') |+---------------------------------- ----------+| земя |+----------------------------------------------+предварително>В този случай има съвпадение и поднизът се връща.
Множество съвпадения
По подразбиране, ако има няколко съвпадения в низа, първото се връща:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Резултат:
+---------------------------------------+| REGEXP_SUBSTR('Заем за земя', 'l.nd') |+---------------------------------- ------+| Давам на заем |+-----------------------------------+Няма съвпадение
Ето пример, където няма съвпадение:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Резултат:
+----------------------------------------+| REGEXP_SUBSTR('Заем за земя', '^C') |+---------------------------------- ---+| |+----------------------------------------+Няма съвпадение, така че резултатът е празен низ.
Чувствителност на регистрите
REGEXP_SUBSTR()
функцията следва правилата за чувствителност към малки и големи букви на ефективното съпоставяне. Съпоставянето се извършва независимо от главните и малки букви за съпоставянията без малки и големи букви и чувствителни към малките букви за съпоставянията, чувствителни към малки и големи букви и за двоични данни.Ето един пример:
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";
Резултат:
+------------+-----------------+-------------- --+| Моята по подразбиране | Нечувствителни към главни букви | Чувствителен на главни букви |+------------+-----------------+-------------- --+| Котка | Котка | |+-----------+------------------+---------------- +Моето съпоставяне по подразбиране е независимо от главните букви. Другите два низа бяха принудени към съпоставяне, независимо от главните и главни букви, съответно.
Предоставяне на
BINARY
низът също е чувствителен към малки и големи букви (вижте по-долу).Двоични низове
Подаване на
BINARY
низът също влияе на чувствителността на главните и малки букви. СBINARY
низове, символът с главни букви е различен от неговия аналог с малки букви:Пример:
SELECT REGEXP_SUBSTR('My Cats', 'c.t') AS "Character", REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Резултат:
+-----------+-------+| Характер | Двоичен |+-----------+-------+| Котка | |+----------+-------+Ето какво се случва, ако променим регистъра:
SELECT REGEXP_SUBSTR('My Cats', 'C.t') AS "Character", REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Резултат:
+-----------+-------+| Характер | Двоичен |+-----------+-------+| Котка | Котка |+----------+-------+Нулеви аргументи
Предаването на
null
тъй като всеки аргумент води доnull
:SELECT REGEXP_SUBSTR(null, 'c.t') AS "1", REGEXP_SUBSTR('Cat', null) AS "2", REGEXP_SUBSTR(null, null) AS "3";
Резултат:
+------+------+------+| 1 | 2 | 3 |+------+------+------+| NULL | NULL | NULL |+------+------+------+Грешен брой аргументи
Предаването на грешен брой аргументи или липсата на аргументи води до грешка:
SELECT REGEXP_SUBSTR('Cat');
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „REGEXP_SUBSTR“