Mysql
 sql >> база данни >  >> RDS >> Mysql

Как работи функцията REGEXP_INSTR() в MySQL

В MySQL, REGEXP_INSTR() функцията връща началния индекс на подниз, който съответства на шаблона на регулярния израз.

Индексът започва от 1 . Ако няма съвпадение, резултатът е 0 .

Синтаксис

Синтаксисът е така:

REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])

Където expr е входният низ и pat е шаблонът на регулярния израз за подниза.

Незадължителният pos аргумент ви позволява да посочите позиция в низа, за да започнете търсенето. Ако се пропусне, започва от позиция 1.

Незадължителното occurrence аргумент ви позволява да посочите кое възникване на съвпадението да търсите. Ако се пропусне, се използва първото появяване (възникване 1).

Незадължителната return_option аргумент ви позволява да посочите кой тип позиция да върнете. Ако използвате 0 , той ще върне позицията на първия знак в съответстващия подниз. Ако използвате 1 връща позицията на първия знак след съвпадащия подниз. Ако се пропусне, стойността е 0 .

Незадължителният match_type аргумент ви позволява да прецизирате регулярния израз. Например, можете да използвате този аргумент, за да посочите съвпадение, което е чувствително към главни букви или не.

Пример 1 – Основна употреба

Ето един основен пример:

SELECT REGEXP_INSTR('Cat', 'at') Резултат;

Резултат:

+--------+| Резултат |+--------+| 2 |+-------+

В този случай има съвпадение и поднизът започва от позиция 2.

Пример 2 – Няма съвпадение

Ето пример, където няма съвпадение:

SELECT REGEXP_INSTR('Cat', '^at') Резултат;

Резултат:

+--------+| Резултат |+--------+| 0 |+-------+

Няма съвпадение, така че резултатът е 0 . Няма съвпадение, защото посочих, че низът трябва да започва с подниз.

Нека го променим така, че да започнете с този подниз:

SELECT REGEXP_INSTR('at', '^at') Резултат;

Резултат:

+--------+| Резултат |+--------+| 1 |+-------+

Пример 3 – pos Аргумент

Ето пример за определяне на начална позиция:

SELECT REGEXP_INSTR('Cat Cat', 'Cat', 2) Резултат;

Резултат:

+--------+| Резултат |+--------+| 5 |+-------+

Така получаваме индекса на второто появяване.

Имайте предвид, че индексът все още започва да брои от позиция 1, независимо къде сте посочили началната позиция.

Следният пример показва това по-ясно:

SELECT REGEXP_INSTR('Котка', 'Котка', 2) КАТО 'Поз 2', REGEXP_INSTR('Котка', 'Котка', 3) КАТО 'Поз. 3', REGEXP_INSTR('Котка', ' Cat“, 5) AS „Pos 5“;

Резултат:

+-------+-------+-------+| Поз 2 | Поз 3 | Поз 5 |+-------+-------+-------+| 5 | 5 | 5 |+-------+-------+-------+

Разбира се, в зависимост от вашия модел на регулярни изрази, това може да върне индекса на напълно различни поднизове. Пример:

SELECT REGEXP_INSTR('Cat City е МНОГО сладък!', 'C.t', 1) 'Pos 1', REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2) 'Pos 2 ', REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 6) 'Поз. 6';

Резултат:

+-------+-------+-------+| Поз 1 | Поз 2 | Поз 6 |+-------+-------+-------+| 1 | 5 | 16 |+-------+-------+-------+

Можем да проверим поднизовете с REGEXP_SUBSTR() функция:

SELECT REGEXP_SUBSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 1) 'Поз. 1', REGEXP_SUBSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 2) 'Поз. 2 ', REGEXP_SUBSTR('Cat City е МНОГО сладък!', 'C.t', 6) 'Поз. 6';

Резултат:

+-------+-------+-------+| Поз 1 | Поз 2 | Поз 6 |+-------+-------+-------+| Котка | Цит | Изрязване |+-------+-------+-------+

Пример 4 – occurrence Аргумент

Ето пример за използване на occurrence аргумент. Във всички случаи започваме от позиция 1:

SELECT REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 1, 1) 'Случка 1', REGEXP_INSTR('Cat City е ТАКОЕ Сладък!', 'C.t', 1, 2 ) 'Случай 2', REGEXP_INSTR('Котешкият град е ТОЛКОВА сладък!', 'C.t', 1, 3) 'Възникнал 3';

Резултат:

<пред>+--------------+--------------+--------------+| Възникване 1 | Възникване 2 | Възникване 3 |+--------------+--------------+--------------+| 1 | 5 | 16 |+--------------+--------------+--------------+

Ако обаче започнем от друга позиция, резултатът е различен:

SELECT REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 2, 1) 'Случай 1', REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 2, 2 ) 'Случай 2', REGEXP_INSTR('Котешкият град е ТОЛКОВА сладък!', 'C.t', 2, 3) 'Случай 3';

Резултат:

<пред>+--------------+--------------+--------------+| Възникване 1 | Възникване 2 | Възникване 3 |+--------------+--------------+--------------+| 5 | 16 | 0 |+--------------+--------------+--------------+

Това се случи, защото нашата изходна позиция дойде след началото на първото събитие. Следователно събитие 2 стана събитие 1, а събитие 3 стана събитие 2. И тъй като нямаше повече събития, резултатът от събитие 3 беше отрицателен (т.е. нямаше събитие 3).

Пример 5 – return_option Аргумент

Ето пример за използване на return_option аргумент:

SELECT REGEXP_INSTR('Cat City е МНОГО сладък!', 'C.t', 1, 1, 0) 'Опция 0', REGEXP_INSTR('Cat City е ТОЛКОВА Сладък!', 'C.t', 1 , 1, 1) „Опция 1“;

Резултат:

+----------+----------+| Вариант 0 | Вариант 1 |+----------+---------+| 1 | 4 |+---------+----------+

Опция 0 върна първия знак на съответстващия подниз. Вариант 1 върна позицията след съответстващия подниз.

Ето как изглежда, ако го приложим към предишния пример:

SELECT REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 1, 1, 0) 'Възникване 1', REGEXP_INSTR('Cat City е ТАКОЕ Сладък!', 'C.t', 1 , 2, 0) 'Възникване 2', REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 1, 3, 0) 'Възникване 3'UNION ALLSELECT REGEXP_INSTR('Cat City е ТОЛКОВА Сладък!', 'C.t', 1, 1, 1), REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C.t', 1, 2, 1), REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'C .t', 1, 3, 1);

Резултат:

<пред>+--------------+--------------+--------------+| Възникване 1 | Възникване 2 | Възникване 3 |+--------------+--------------+--------------+| 1 | 5 | 16 || 4 | 8 | 19 |+--------------+--------------+--------------+

В този случай направихме един набор, използвайки опция 0, а друг, използвайки опция 1, след което ги съединихме заедно с помощта на UNION ALL .

Пример 6 – match_type Аргумент

Можете да предоставите допълнителен аргумент, за да определите типа на съвпадението. Това ви позволява да укажете неща като това дали съвпадението е чувствително или не, дали да включвате или не терминатори на ред и т.н.

Ето пример за посочване на съвпадение, чувствително към главни и малки букви:

SELECT REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'c.t', 1, 1, 0, 'c') 'Чувствителен на малки и малки букви', REGEXP_INSTR('Cat City е ТОЛКОВА сладък!', 'c .t', 1, 1, 0, 'i') 'Без значение на главни и малки букви';

Резултат:

+----------------+-----------------+| Регистрът на буквите е чувствителен | Без значение на регистрите |+----------------+----------------+| 0 | 1 |+----------------+-----------------+

match_type аргументът може да съдържа следните знаци:

c
Отчитане на главни и малки букви.
i
Съответствие без разлика в главни и малки букви.
m
Режим на няколко реда. Разпознаване на завършващите линии в низа. Поведението по подразбиране е да съвпадат терминатори на ред само в началото и в края на низовия израз.
n
. символът съвпада с терминатори на ред. По подразбиране е за . съвпадение за спиране в края на ред.
u
Окончания на редове само за Unix. Само символът за нов ред се разпознава като ред, завършващ с . , ^ и $ оператори за съвпадение.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Производителност на пакетно вмъкване на JDBC

  2. Как да получите записи от последните 10 минути в MySQL

  3. Как да избера между 1-вия ден на текущия месец и текущия ден в MySQL?

  4. Как да съхранявате повтарящи се дати, като имате предвид лятното часово време

  5. MySQL заявка за присъединяване с помощта на like?