Di MariaDB, REGEXP_INSTR()
fungsi mengembalikan indeks awal substring yang cocok dengan pola ekspresi reguler.
Indeks dimulai dari 1
. Jika tidak ada yang cocok, hasilnya adalah 0
.
Sintaks
Sintaksnya seperti ini:
REGEXP_INSTR(subject, pattern)
Dimana subject
adalah string input dan pattern
adalah pola ekspresi reguler untuk substring.
Perhatikan bahwa, pada saat penulisan, REGEXP_INSTR()
versi MariaDB menerima argumen lebih sedikit daripada REGEXP_INSTR()
MySQL . Versi MySQL memungkinkan Anda memberikan argumen untuk posisi awal pencarian, kemunculan mana yang harus dicari, jenis posisi mana yang akan dikembalikan, serta cara untuk menyaring ekspresi reguler.
Contoh
Berikut ini contoh dasarnya:
SELECT REGEXP_INSTR('Cat', 'at');
Hasil:
+---------------------------+ | REGEXP_INSTR('Cat', 'at') | +---------------------------+ | 2 | +---------------------------+
Dalam hal ini ada kecocokan, dan substring dimulai pada posisi 2.
Tidak Cocok
Berikut ini contoh di mana tidak ada kecocokan:
SELECT REGEXP_INSTR('Cat', '^at');
Hasil:
+----------------------------+ | REGEXP_INSTR('Cat', '^at') | +----------------------------+ | 0 | +----------------------------+
Tidak ada yang cocok, jadi hasilnya 0
. Tidak ada kecocokan karena saya menetapkan bahwa string harus dimulai dengan substring.
Mari kita ubah agar tidak mulai dengan substring itu:
SELECT REGEXP_INSTR('at', '^at');
Hasil:
+---------------------------+ | REGEXP_INSTR('at', '^at') | +---------------------------+ | 1 | +---------------------------+
Sensitivitas Huruf Besar
REGEXP_INSTR()
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 huruf besar/kecil dan untuk data biner.
Ini contohnya:
SELECT
REGEXP_INSTR('Cat', 'c') AS "My Default",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";
Hasil:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
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 (lihat di bawah).
String Biner
Secara default, posisi diukur dalam karakter, bukan byte. Namun, Anda dapat mentransmisikan set karakter multi-byte ke BINARY
untuk mendapatkan offset dalam byte jika perlu.
Contoh:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";
Hasil:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
Simbol hak cipta menggunakan dua byte, dan oleh karena itu dalam contoh ini kita mendapatkan hasil 4
saat mentransmisikannya ke BINARY
, dibandingkan dengan 3
yang kita dapatkan sebaliknya.
Meskipun perhatikan bahwa melewati BINARY
string juga mempengaruhi sensitivitas kasus. Dengan BINARY
string, karakter huruf besar berbeda dengan huruf kecilnya:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";
Hasil:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Di sini, saya mencari huruf kecil c
bukannya huruf besar, dan BINARY
string tidak cocok.
Argumen Null
Melewati null
karena argumen apa pun menghasilkan null
:
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3";
Hasil:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Jumlah Argumen Salah
Melewati jumlah argumen yang salah atau tidak ada argumen, menghasilkan kesalahan:
SELECT REGEXP_INSTR('Cat');
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'