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

Как REGEXP_REPLACE() работи в MariaDB

В MariaDB, REGEXP_REPLACE() функцията заменя появата на подниз в низ, който съответства на дадения модел на регулярен израз.

Целият низ се връща заедно със заместниците.

Ако няма съвпадение (т.е. входният низ не съдържа подниза), целият низ се връща непроменен.

Синтаксис

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

REGEXP_REPLACE(subject, pattern, replace)

Където subject е входният низ, pattern е шаблонът на регулярния израз за подниза и replace е заместващият низ.

Имайте предвид, че към момента на писане версията на MariaDB на REGEXP_REPLACE() приема по-малко аргументи от REGEXP_REPLACE() функция. Версията на MySQL ви позволява да предоставите аргументи за началната позиция на търсенето, коя поява да търсите, както и начин за прецизиране на регулярния израз с тип на съвпадение.

Пример

Ето един основен пример за използване на REGEXP_REPLACE() в MariaDB:

SELECT REGEXP_REPLACE('Cats and dogs', 'd.g', 'bird');

Резултат:

+------------------------------------------------+
| REGEXP_REPLACE('Cats and dogs', 'd.g', 'bird') |
+------------------------------------------------+
| Cats and birds                                 |
+------------------------------------------------+

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

Регулярните изрази могат да бъдат много мощни и този пример използва много прост пример. За да използвате REGEXP_REPLACE() ефективно, ще трябва да знаете правилния модел, който да използвате за желания резултат.

Множество съвпадения

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

SELECT REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird');

Резултат:

+----------------------------------------------------------+
| REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird') |
+----------------------------------------------------------+
| My bird likes other birds                                |
+----------------------------------------------------------+

Няма съвпадение

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

SELECT REGEXP_REPLACE('Cats and dogs', 't.g', 'bird');

Резултат:

+------------------------------------------------+
| REGEXP_REPLACE('Cats and dogs', 't.g', 'bird') |
+------------------------------------------------+
| Cats and dogs                                  |
+------------------------------------------------+

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

Чувствителност на регистрите

REGEXP_REPLACE() функцията следва правилата за чувствителност към малки и големи букви на ефективното съпоставяне. Съпоставянето се извършва независимо от главните и малки букви за съпоставянията без малки и големи букви и чувствителни към малките и малки букви за съпоставянията, чувствителни към малки и големи букви и за двоични данни.

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

SELECT 
    REGEXP_REPLACE('My Cats', 'c.t', 'dog') AS "My Default",
    REGEXP_REPLACE(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t', 'dog') AS "Case Insensitive",
    REGEXP_REPLACE(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t', 'dog') AS "Case Sensitive";

Резултат:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
| My dogs    | My dogs          | My Cats        |
+------------+------------------+----------------+

Моето съпоставяне по подразбиране е независимо от главните букви. Другите два низа бяха принудени към съпоставяне, независимо от главни и малки букви, съответно.

Предоставяне на BINARY низът също е чувствителен към малки и големи букви (повече за това по-късно).

Замяна на чувствителността на главни и малки букви

Чувствителността на малки и главни букви може да бъде отменена с помощта на (?i ) и (?-i ) Флагове на PCRE.

Ето предишния пример, но този път с помощта на (?-i) флаг на всеки шаблон, за да настроите чувствителността на главни и малки букви:

SELECT 
    REGEXP_REPLACE('My Cats', '(?-i)c.t', 'dog') AS "My Default",
    REGEXP_REPLACE(_latin7'My Cats' COLLATE latin7_general_ci, '(?-i)c.t', 'dog') AS "Case Insensitive",
    REGEXP_REPLACE(_latin7'My Cats' COLLATE latin7_general_cs, '(?-i)c.t', 'dog') AS "Case Sensitive";

Резултат:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
| My Cats    | My Cats          | My Cats        |
+------------+------------------+----------------+

И тук се използва (?i) флаг за принудителна нечувствителност към главни и малки букви:

SELECT 
    REGEXP_REPLACE('My Cats', '(?i)c.t', 'dog') AS "My Default",
    REGEXP_REPLACE(_latin7'My Cats' COLLATE latin7_general_ci, '(?i)c.t', 'dog') AS "Case Insensitive",
    REGEXP_REPLACE(_latin7'My Cats' COLLATE latin7_general_cs, '(?i)c.t', 'dog') AS "Case Sensitive";

Резултат:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
| My dogs    | My dogs          | My dogs        |
+------------+------------------+----------------+

Двоични низове

Подаване на BINARY низът също влияе на чувствителността на главните и малки букви. С BINARY низове, символът с главни букви е различен от неговия аналог с малки букви:

Пример:

SELECT 
    REGEXP_REPLACE('My Cats', 'c.t', 'dog') AS "Character",
    REGEXP_REPLACE(BINARY 'My Cats', 'c.t', 'dog') AS "Binary";

Резултат:

+-----------+---------+
| Character | Binary  |
+-----------+---------+
| My dogs   | My Cats |
+-----------+---------+

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

SELECT 
    REGEXP_REPLACE('My Cats', 'C.t', 'dog') AS "Character",
    REGEXP_REPLACE(BINARY 'My Cats', 'C.t', 'dog') AS "Binary";

Резултат:

+-----------+---------+
| Character | Binary  |
+-----------+---------+
| My dogs   | My dogs |
+-----------+---------+

Чувствителност на малки и малки букви на BINARY низовете могат също да бъдат отменени с (?-i) и (?i) Флагове на PCRE:

SELECT 
    REGEXP_REPLACE('My Cats', '(?-i)c.t', 'dog') AS "Character",
    REGEXP_REPLACE(BINARY 'My Cats', '(?-i)c.t', 'dog') AS "Binary";

Резултат:

+-----------+---------+
| Character | Binary  |
+-----------+---------+
| My Cats   | My Cats |
+-----------+---------+

Нулеви аргументи

Предаването на null тъй като всеки аргумент води до null :

SELECT 
    REGEXP_REPLACE(null, 'c.t', 'dog') AS "1",
    REGEXP_REPLACE('Cat', null, 'dog') AS "2",
    REGEXP_REPLACE('Cat', 'c.t', null) AS "3",
    REGEXP_REPLACE(null, null, null) AS "4";

Резултат:

+------+------+------+------+
| 1    | 2    | 3    | 4    |
+------+------+------+------+
| NULL | NULL | NULL | NULL |
+------+------+------+------+

Грешен брой аргументи

Предаването на грешен брой аргументи или липсата на аргументи води до грешка:

SELECT REGEXP_REPLACE();

Резултат:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_REPLACE'

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

  2. MariaDB 10.6 и NextCloud:COMPRESSED Редът е само за четене по подразбиране

  3. MariaDB ROWNUM() Обяснено

  4. Как SOUNDS LIKE работи в MariaDB

  5. Как да постигнем PCI съответствие за MySQL и MariaDB с ClusterControl - Повторението