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'