MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana REGEXP_REPLACE() Bekerja di MariaDB

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'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengantar Penerapan MySQL Menggunakan Peran yang Mungkin

  2. Master High Availability Manager (MHA) Telah Rusak! Apa yang saya lakukan sekarang?

  3. Cara Menginstal dan Mengamankan MariaDB di CentOS 7

  4. 4 Cara Menemukan Baris yang Mengandung Huruf Besar di MariaDB

  5. Bagaimana TAN() Bekerja di MariaDB