Di MariaDB, REGEXP_REPLACE()
fungsi menggantikan kemunculan substring dalam string yang cocok dengan pola ekspresi reguler yang diberikan.
Seluruh string dikembalikan bersama dengan penggantinya.
Jika tidak ada kecocokan (yaitu string input tidak berisi substring), seluruh string dikembalikan tidak berubah.
Sintaks
Sintaksnya seperti ini:
REGEXP_REPLACE(subject, pattern, replace)
Dimana subject
adalah string input, pattern
adalah pola ekspresi reguler untuk substring, dan replace
adalah string pengganti.
Perhatikan bahwa, pada saat penulisan, versi REGEXP_REPLACE()
MariaDB menerima lebih sedikit argumen daripada REGEXP_REPLACE()
MySQL fungsi. Versi MySQL memungkinkan Anda memberikan argumen untuk posisi awal penelusuran, kemunculan mana yang akan ditelusuri, serta cara menyaring ekspresi reguler dengan jenis pencocokan.
Contoh
Berikut adalah contoh dasar penggunaan REGEXP_REPLACE()
di MariaDB:
SELECT REGEXP_REPLACE('Cats and dogs', 'd.g', 'bird');
Hasil:
+------------------------------------------------+ | REGEXP_REPLACE('Cats and dogs', 'd.g', 'bird') | +------------------------------------------------+ | Cats and birds | +------------------------------------------------+
Dalam hal ini ada kecocokan, dan substring diganti dengan string pengganti.
Ekspresi reguler bisa sangat kuat, dan contoh ini menggunakan contoh yang sangat sederhana. Untuk menggunakan REGEXP_REPLACE()
secara efektif, Anda harus mengetahui pola yang benar untuk digunakan untuk hasil yang diinginkan.
Beberapa Kecocokan
Berikut ini contoh dengan beberapa kecocokan:
SELECT REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird');
Hasil:
+----------------------------------------------------------+ | REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird') | +----------------------------------------------------------+ | My bird likes other birds | +----------------------------------------------------------+
Tidak Cocok
Berikut ini contoh di mana tidak ada kecocokan:
SELECT REGEXP_REPLACE('Cats and dogs', 't.g', 'bird');
Hasil:
+------------------------------------------------+ | REGEXP_REPLACE('Cats and dogs', 't.g', 'bird') | +------------------------------------------------+ | Cats and dogs | +------------------------------------------------+
Tidak ada kecocokan, sehingga string asli dikembalikan tidak berubah.
Sensitivitas Huruf Besar
REGEXP_REPLACE()
fungsi mengikuti aturan sensitivitas huruf dari susunan yang efektif. Pencocokan dilakukan dengan tidak peka huruf besar/kecil untuk susunan huruf besar/kecil, dan peka huruf besar/kecil untuk susunan peka huruf besar/kecil dan untuk data biner.
Ini contohnya:
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";
Hasil:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | My dogs | My dogs | My Cats | +------------+------------------+----------------+
Susunan default saya tidak peka huruf besar-kecil. Dua string lainnya dipaksa ke susunan case-sensitive dan collation case sensitive masing-masing.
Memberikan BINARY
string juga peka huruf besar/kecil (lebih lanjut tentang ini nanti).
Ganti Sensitivitas Huruf Besar
Sensitivitas kasus susunan dapat diganti menggunakan (?i
) dan (?-i
) Bendera PCRE.
Ini contoh sebelumnya, tapi kali ini menggunakan (?-i)
tandai setiap pola untuk memaksa sensitivitas huruf besar-kecil:
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";
Hasil:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | My Cats | My Cats | My Cats | +------------+------------------+----------------+
Dan ini dia menggunakan (?i)
tandai untuk memaksa ketidakpekaan huruf besar-kecil:
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";
Hasil:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | My dogs | My dogs | My dogs | +------------+------------------+----------------+
String Biner
Melewati BINARY
string juga mempengaruhi sensitivitas kasus. Dengan BINARY
string, karakter huruf besar berbeda dengan huruf kecilnya:
Contoh:
SELECT
REGEXP_REPLACE('My Cats', 'c.t', 'dog') AS "Character",
REGEXP_REPLACE(BINARY 'My Cats', 'c.t', 'dog') AS "Binary";
Hasil:
+-----------+---------+ | Character | Binary | +-----------+---------+ | My dogs | My Cats | +-----------+---------+
Inilah yang terjadi jika kita mengubah kasusnya:
SELECT
REGEXP_REPLACE('My Cats', 'C.t', 'dog') AS "Character",
REGEXP_REPLACE(BINARY 'My Cats', 'C.t', 'dog') AS "Binary";
Hasil:
+-----------+---------+ | Character | Binary | +-----------+---------+ | My dogs | My dogs | +-----------+---------+
Sensitivitas huruf besar/kecil pada BINARY
string juga dapat diganti dengan (?-i)
dan (?i)
Tanda PCRE:
SELECT
REGEXP_REPLACE('My Cats', '(?-i)c.t', 'dog') AS "Character",
REGEXP_REPLACE(BINARY 'My Cats', '(?-i)c.t', 'dog') AS "Binary";
Hasil:
+-----------+---------+ | Character | Binary | +-----------+---------+ | My Cats | My Cats | +-----------+---------+
Argumen Null
Melewati null
karena argumen apa pun menghasilkan 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";
Hasil:
+------+------+------+------+ | 1 | 2 | 3 | 4 | +------+------+------+------+ | NULL | NULL | NULL | NULL | +------+------+------+------+
Jumlah Argumen Salah
Melewati jumlah argumen yang salah atau tidak ada argumen, menghasilkan kesalahan:
SELECT REGEXP_REPLACE();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_REPLACE'