sql >> Database teknologi >  >> RDS >> MariaDB

Sådan fungerer REGEXP_REPLACE() i MariaDB

I MariaDB er REGEXP_REPLACE() funktion erstatter forekomster af understrengen i en streng, der matcher det givne regulære udtryksmønster.

Hele strengen returneres sammen med erstatningerne.

Hvis der ikke er noget match (dvs. inputstrengen indeholder ikke understrengen), returneres hele strengen uændret.

Syntaks

Syntaksen ser sådan ud:

REGEXP_REPLACE(subject, pattern, replace)

Hvor emne er inputstrengen, mønster er det regulære udtryksmønster for understrengen, og erstat er erstatningsstrengen.

Bemærk, at i skrivende stund MariaDBs version af REGEXP_REPLACE() accepterer færre argumenter end MySQL's REGEXP_REPLACE() fungere. MySQLs version giver dig mulighed for at give argumenter for søgningens startposition, hvilken forekomst du skal søge efter, samt en måde at forfine det regulære udtryk med matchtype.

Eksempel

Her er et grundlæggende eksempel på brug af REGEXP_REPLACE() i MariaDB:

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

Resultat:

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

I dette tilfælde er der et match, og understrengen erstattes med erstatningsstrengen.

Regulære udtryk kan være meget kraftfulde, og dette eksempel bruger et meget simpelt eksempel. For at bruge REGEXP_REPLACE() effektivt, skal du kende det korrekte mønster til at bruge til det ønskede resultat.

Flere match

Her er et eksempel med flere matches:

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

Resultat:

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

Ingen match

Her er et eksempel, hvor der ikke er nogen match:

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

Resultat:

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

Der er ingen match, så den oprindelige streng returneres uændret.

Skrivar og bogstaver

REGEXP_REPLACE() funktionen følger reglerne for store og små bogstaver for den effektive sortering. Matching udføres ufølsomt for store og små bogstaver for versal-ufølsomme sorteringer og store og små bogstaver for store og små bogstaver for store og små bogstaver for store og små bogstaver og for binære data.

Her er et eksempel:

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";

Resultat:

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

Min standardsortering er ufølsom mellem store og små bogstaver. De to andre strenge blev tvunget til henholdsvis en versal-ufølsom sortering og store og små bogstaver.

Angivelse af en BINÆR streng skelner også mellem store og små bogstaver (mere om dette senere).

Tilsidesæt store og små bogstaver

Indstillingen af ​​store og små bogstaver kan tilsidesættes ved hjælp af (?i ) og (?-i ) PCRE-flag.

Her er det forrige eksempel, men denne gang ved hjælp af (?-i) flag på hvert mønster for at fremtvinge følsomhed mellem store og små bogstaver:

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";

Resultat:

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

Og her bruger den (?i) flag for at fremtvinge ufølsomhed mellem store og små bogstaver:

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";

Resultat:

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

Binære strenge

Sender en BINÆR streng påvirker også følsomheden for store og små bogstaver. Med BINÆR strenge, er et stort bogstav anderledes end dets modstykke med små bogstaver:

Eksempel:

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

Resultat:

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

Her er, hvad der sker, hvis vi ændrer sagen:

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

Resultat:

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

Versalfølsomhed på BINÆR strenge kan også tilsidesættes med (?-i) og (?i) PCRE-flag:

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

Resultat:

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

Nul-argumenter

Sender null da ethvert argument resulterer i 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";

Resultat:

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

Forkert antal argumenter

Sender det forkerte antal argumenter eller ingen argumenter, resulterer det i en fejl:

SELECT REGEXP_REPLACE();

Resultat:

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

  1. Entity Developer og ADO.Net Data Providers understøtter nu Entity Framework Core 5

  2. Databasedesign med Vertabelo

  3. Introduktion til Failover for MySQL-replikering - 101-bloggen

  4. Kan ikke oprette forbindelse til heroku postgresql-database fra lokal node-app med efterfølger