В MySQL, REGEXP_SUBSTR()
функцията връща подниз, който съответства на дадения модел на регулярен израз.
Ако няма съвпадение (т.е. входният низ не съдържа подниза), резултатът е NULL
.
Синтаксис
Синтаксисът е така:
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
Където expr
е входният низ и pat
е шаблонът на регулярния израз за подниза.
Незадължителният pos
аргумент ви позволява да посочите позиция в низа, за да започнете търсенето. Ако се пропусне, започва от позиция 1.
Незадължителното occurrence
аргумент ви позволява да посочите кое възникване на съвпадението да търсите. Ако се пропусне, се използва първото появяване (възникване 1).
Незадължителният match_type
аргумент ви позволява да прецизирате регулярния израз. Например, можете да използвате този аргумент, за да посочите съвпадение, което е чувствително към главни букви или не.
Пример 1 – Основна употреба
Ето един основен пример:
SELECT REGEXP_SUBSTR('Тайланд или Камбоджа', 'l.nd') Резултат;
Резултат:
+--------+| Резултат |+--------+| земя |+--------+
В този случай има съвпадение и поднизът се връща.
Пример 2 – Множество съвпадения
По подразбиране, ако има няколко съвпадения в низа, първото се връща (въпреки че можете да посочите друго събитие, ако е необходимо. Ще стигнем до това скоро):
SELECT REGEXP_SUBSTR('Заем за земя', 'l.nd') Резултат;
Резултат:
+--------+| Резултат |+--------+| Заем |+--------+
Пример 3 – Няма съвпадение
Ето пример, където няма съвпадение:
SELECT REGEXP_SUBSTR('Заем за земя', '^C') Резултат;
Резултат:
+--------+| Резултат |+--------+| NULL |+--------+
Няма съвпадение, така че резултатът е NULL
.
Пример 4 – pos
Аргумент
Ето пример за определяне на начална позиция:
SELECT REGEXP_SUBSTR('Cat Cut Cat', 'C.t', 2) Резултат;
Резултат:
+--------+| Резултат |+--------+| Изрязване |+--------+
Започнахме от позиция 2, която идва след началото на първото срещане, така че вместо това се връща следващото събитие.
Ето още един пример:
SELECT REGEXP_SUBSTR('Cat Cut Cat', 'C.t', 1) 'Pos 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) 'Pos 2', REGEXP_SUBSTR('Cat Cut Cot“, „C.t“, 6) „Поз 6“;
Резултат:
+-------+-------+-------+| Поз 1 | Поз 2 | Поз 6 |+-------+-------+-------+| Котка | Изрежете | Кошарка |+-------+-------+-------+
Пример 5 – occurrence
Аргумент
Ето пример за използване на occurrence
аргумент. Във всички случаи започваме от позиция 1:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 1) 'Eccurrence 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 2) 'Eccurrence 2', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 3) 'Среща 3';
Резултат:
<пред>+--------------+--------------+--------------+| Възникване 1 | Възникване 2 | Възникване 3 |+--------------+--------------+--------------+| Котка | Изрежете | Кошарка |+--------------+--------------+--------------+предварително>Ако обаче започнем от друга позиция, резултатът е различен:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 1) 'Eccurrence 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 2) 'Eccurrence 2', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 3) 'Среща 3';
Резултат:
<пред>+--------------+--------------+--------------+| Възникване 1 | Възникване 2 | Възникване 3 |+--------------+--------------+--------------+| Изрежете | Кошарка | NULL |+--------------+--------------+--------------+предварително>Това се случи, защото нашата начална позиция дойде след началото на първото събитие. Следователно събитие 2 стана събитие 1, а събитие 3 стана събитие 2. И тъй като нямаше повече събития, резултатът от събитие 3 беше NULL (т.е. нямаше събитие 3).
Пример 6 – match_type
Аргумент
Можете да предоставите допълнителен аргумент, за да определите типа на съвпадението. Това ви позволява да укажете неща като това дали съвпадението е чувствително или не, дали да включвате или не терминатори на ред и т.н.
Ето пример за посочване на съвпадение, чувствително към главни и малки букви:
SELECT REGEXP_SUBSTR('Котешко креватче', 'c.t', 1, 1, 'c') 'Чувствителен регистър', REGEXP_SUBSTR('Cat Cut Cut', 'c.t', 1, 1, „i“) „Регистърът не е чувствителен“;
Резултат:
+----------------+-----------------+| Регистрът на буквите е чувствителен | Без значение на регистрите |+----------------+----------------+| NULL | Котка |+----------------+----------------+
match_type
аргументът може да съдържа следните знаци:
c
- Отчитане на главни и малки букви.
i
- Съответствие без разлика в главни и малки букви.
m
- Режим на няколко реда. Разпознаване на завършващите линии в низа. Поведението по подразбиране е да съвпадат терминатори на ред само в началото и в края на низовия израз.
n
.
символът съвпада с терминатори на ред. По подразбиране е за.
съвпадение за спиране в края на ред.u
- Окончания на редове само за Unix. Само символът за нов ред се разпознава като ред, завършващ с
.
,^
и$
оператори за съвпадение.