Di MariaDB, REGEXP
operator digunakan untuk menentukan apakah string cocok dengan ekspresi reguler atau tidak.
Jika string cocok dengan ekspresi reguler yang diberikan, hasilnya adalah 1
, jika tidak maka 0
.
Sintaks
Sintaksnya seperti ini:
expr REGEXP pat
Dimana expr
adalah string input dan pat
adalah ekspresi reguler yang digunakan untuk menguji string.
Contoh
Di bawah ini adalah contoh penggunaan REGEXP
operator dengan pola yang berbeda.
Ekspresi Reguler Dasar
Mari kita mulai dengan contoh paling sederhana. Ekspresi reguler paling sederhana yang dapat kita gunakan adalah ekspresi yang tidak memiliki karakter khusus di dalamnya. Di sini, kita hanya menggunakan string. Jika ada bagian dari string input yang cocok dengan string itu, ia mengembalikan kecocokan.
SELECT
'Corn' REGEXP 'Corn' AS "Corn",
'Acorn' REGEXP 'Corn' AS "Acorn",
'Corner' REGEXP 'Corn' AS "Corner",
'Cheese' REGEXP 'Corn' AS "Cheese";
Hasil:
+------+-------+--------+--------+ | Corn | Acorn | Corner | Cheese | +------+-------+--------+--------+ | 1 | 1 | 1 | 0 | +------+-------+--------+--------+
Mencocokkan Awal Sebuah String
Dalam contoh ini, ekspresi reguler menetapkan bahwa string harus dimulai dengan Co
.
SELECT
'Corn' REGEXP '^Co' AS "Corn",
'Acorn' REGEXP '^Co' AS "Acorn",
'Cheese' REGEXP '^Co' AS "Cheese";
Hasil:
+------+-------+--------+ | Corn | Acorn | Cheese | +------+-------+--------+ | 1 | 0 | 0 | +------+-------+--------+
Mencocokkan Akhir String
Dalam contoh ini, ekspresi reguler menetapkan bahwa string harus diakhiri dengan rn
.
SELECT
'Corn' REGEXP 'rn$' AS "Corn",
'Acorn' REGEXP 'rn$' AS "Acorn",
'Cheese' REGEXP 'rn$' AS "Cheese";
Hasil:
+------+-------+--------+ | Corn | Acorn | Cheese | +------+-------+--------+ | 1 | 1 | 0 | +------+-------+--------+
Cocokkan Semua Karakter
.
karakter cocok dengan karakter apa pun.
SELECT
'Corn' REGEXP '.' AS "Corn",
'Cheese' REGEXP '.' AS "Cheese",
'' REGEXP '.' AS "";
Hasil:
+------+--------+---+ | Corn | Cheese | | +------+--------+---+ | 1 | 1 | 0 | +------+--------+---+
Karakter ini biasanya digunakan bersama dengan karakter lain untuk menentukan kriteria lebih lanjut. Misalnya:
SELECT
'Corn' REGEXP '^C.rn$' AS "Corn",
'Crn' REGEXP '^C.rn$' AS "Crn";
Hasil:
+------+-----+ | Corn | Crn | +------+-----+ | 1 | 0 | +------+-----+
Di sini kita tentukan bahwa string harus dimulai dengan C
, yang harus diikuti oleh karakter (karakter apa saja), dan harus diakhiri dengan rn
.
Perhatikan bahwa karakter ini menentukan satu contoh karakter. Jika Anda ingin menentukan beberapa instance (misalnya ee
alih-alih hanya e
), Anda perlu menambahkan lebih banyak .
karakter.
SELECT
'Tweet' REGEXP '^Tw..t$' AS "Tweet",
'Tweat' REGEXP '^Tw..t$' AS "Tweat",
'Tweet' REGEXP '^Tw.t$' AS "Tweet",
'Twit' REGEXP '^Tw..t$' AS "Twit";
Hasil:
+-------+-------+-------+------+ | Tweet | Tweat | Tweet | Twit | +-------+-------+-------+------+ | 1 | 1 | 0 | 0 | +-------+-------+-------+------+
Cara lain untuk melakukannya adalah dengan menentukan jumlah kemunculan dalam kurung kurawal:
SELECT
'Tweet' REGEXP '^Tw.{2}t$' AS "Tweet",
'Tweat' REGEXP '^Tw.{2}t$' AS "Tweat",
'Tweet' REGEXP '^Tw.{1}t$' AS "Tweet",
'Twit' REGEXP '^Tw.{2}t$' AS "Twit";
Hasil:
+-------+-------+-------+------+ | Tweet | Tweat | Tweet | Twit | +-------+-------+-------+------+ | 1 | 1 | 0 | 0 | +-------+-------+-------+------+
Namun, jika Anda mengetahui karakter yang Anda cari, Anda dapat menentukan karakter tersebut (bukan .
karakter), seperti yang ditunjukkan dalam contoh berikut.
Cocokkan Nol atau Lebih Banyak Instance dari Karakter Tertentu
Kita dapat melakukan hal berikut untuk menentukan nol atau lebih instance dari e
karakter:
SELECT
'Twet' REGEXP '^Twe*t$' AS "Twet",
'Tweet' REGEXP '^Twe*t$' AS "Tweet",
'Tweeet' REGEXP '^Twe*t$' AS "Tweeet",
'Twt' REGEXP '^Twe*t$' AS "Twt",
'Twit' REGEXP '^Twe*t$' AS "Twit",
'Twiet' REGEXP '^Twe*t$' AS "Twiet",
'Tweit' REGEXP '^Twe*t$' AS "Tweit";
Hasil:
+------+-------+--------+-----+------+-------+-------+ | Twet | Tweet | Tweeet | Twt | Twit | Twiet | Tweit | +------+-------+--------+-----+------+-------+-------+ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | +------+-------+--------+-----+------+-------+-------+
Empat pertandingan pertama tetapi tiga pertandingan terakhir tidak.
Cocokkan Satu atau Lebih Instance dari Karakter Tertentu
Kita dapat memodifikasi contoh sebelumnya sehingga kita hanya mendapatkan kecocokan jika satu atau lebih banyak karakter ditemukan (contoh sebelumnya mengembalikan kecocokan jika nol atau lebih ditemukan). Untuk melakukan ini, kita cukup menggunakan +
bukannya *
:
SELECT
'Twet' REGEXP '^Twe+t$' AS "Twet",
'Tweet' REGEXP '^Twe+t$' AS "Tweet",
'Tweeet' REGEXP '^Twe+t$' AS "Tweeet",
'Twt' REGEXP '^Twe+t$' AS "Twt",
'Twit' REGEXP '^Twe+t$' AS "Twit",
'Twiet' REGEXP '^Twe+t$' AS "Twiet",
'Tweit' REGEXP '^Twe+t$' AS "Tweit";
Hasil:
+------+-------+--------+-----+------+-------+-------+ | Twet | Tweet | Tweeet | Twt | Twit | Twiet | Tweit | +------+-------+--------+-----+------+-------+-------+ | 1 | 1 | 1 | 0 | 0 | 0 | 0 | +------+-------+--------+-----+------+-------+-------+
Dalam hal ini, kata keempat mengembalikan hasil yang berbeda dengan contoh sebelumnya.
Cocokkan Nol atau Satu Instance dari Karakter Tertentu
Kita dapat memodifikasi contoh sebelumnya sehingga kita hanya mendapatkan kecocokan pada nol atau salah satu karakter yang diinginkan. Untuk melakukan ini, kami menggunakan ?
:
SELECT
'Twet' REGEXP '^Twe?t$' AS "Twet",
'Tweet' REGEXP '^Twe?t$' AS "Tweet",
'Tweeet' REGEXP '^Twe?t$' AS "Tweeet",
'Twt' REGEXP '^Twe?t$' AS "Twt",
'Twit' REGEXP '^Twe?t$' AS "Twit",
'Twiet' REGEXP '^Twe?t$' AS "Twiet",
'Tweit' REGEXP '^Twe?t$' AS "Tweit";
Hasil:
+------+-------+--------+-----+------+-------+-------+ | Twet | Tweet | Tweeet | Twt | Twit | Twiet | Tweit | +------+-------+--------+-----+------+-------+-------+ | 1 | 0 | 0 | 1 | 0 | 0 | 0 | +------+-------+--------+-----+------+-------+-------+
Alternatif
Anda dapat menggunakan |
karakter untuk mencocokkan satu atau beberapa urutan karakter:
SELECT
'Tweet' REGEXP 'Tw|et' AS "Tweet",
'For Let' REGEXP 'Tw|et' AS "For Let",
'Banana' REGEXP 'Tw|et' AS "Banana";
Hasil:
+-------+---------+--------+ | Tweet | For Let | Banana | +-------+---------+--------+ | 1 | 1 | 0 | +-------+---------+--------+
Berikut ini contoh lain di mana saya mencari seluruh kata:
SELECT
'Cat' REGEXP 'Cat|Dog' AS "Cat",
'Dog' REGEXP 'Cat|Dog' AS "Dog",
'Doggone' REGEXP 'Cat|Dog' AS "Doggone",
'Banana' REGEXP 'Cat|Dog' AS "Banana";
Hasil:
+-----+-----+---------+--------+ | Cat | Dog | Doggone | Banana | +-----+-----+---------+--------+ | 1 | 1 | 1 | 0 | +-----+-----+---------+--------+
Kami masih mendapatkan kecocokan meskipun ekspresi reguler kami hanya cocok dengan sebagian dari string.
Cocokkan Nol atau Lebih Banyak Instance dari Urutan
Anda dapat menggunakan tanda kurung bersama dengan tanda bintang ()*
untuk menentukan nol atau lebih contoh dari suatu urutan:
SELECT
'Banana' REGEXP '(an)*' AS "Banana",
'Land' REGEXP '(an)*' AS "Land",
'Cheese' REGEXP '(an)*' AS "Cheese";
Hasil:
+--------+------+--------+ | Banana | Land | Cheese | +--------+------+--------+ | 1 | 1 | 1 | +--------+------+--------+
Contoh lain:
SELECT
'Banana' REGEXP '^B(an)*d$' AS "Banana",
'Band' REGEXP '^B(an)*d$' AS "Band",
'Bald' REGEXP '^B(an)*d$' AS "Bald",
'Bad' REGEXP '^B(an)*d$' AS "Bad";
Hasil:
+--------+------+------+-----+ | Banana | Band | Bald | Bad | +--------+------+------+-----+ | 0 | 1 | 0 | 0 | +--------+------+------+-----+
Pengulangan
Seperti yang terlihat pada contoh sebelumnya, Anda dapat menggunakan kurung kurawal untuk menentukan pengulangan. Notasi ini memberikan cara yang lebih umum untuk menulis ekspresi reguler daripada beberapa contoh sebelumnya:
SELECT
'Tweeet' REGEXP 'e{3}' AS "Tweeet",
'Tweet' REGEXP 'e{3}' AS "Tweet";
Hasil:
+--------+-------+ | Tweeet | Tweet | +--------+-------+ | 1 | 0 | +--------+-------+
Rentang
Anda dapat menggunakan karakter tanda hubung untuk menentukan rentang. Berikut adalah contoh yang menentukan rentang angka:
SELECT
'Tweet 123' REGEXP '[0-9]' AS "Tweet 123",
'Tweet ABC' REGEXP '[0-9]' AS "Tweet ABC";
Hasil:
+--------+-------+ | Tweeet | Tweet | +--------+-------+ | 1 | 0 | +--------+-------+
Dan contoh berikut menentukan rentang huruf:
SELECT
'Tweet 123' REGEXP '[A-Z]' AS "Tweet 123",
'ABC' REGEXP '[A-Z]' AS "ABC",
'123' REGEXP '[A-Z]' AS "123";
Hasil:
+-----------+-----+-----+ | Tweet 123 | ABC | 123 | +-----------+-----+-----+ | 1 | 1 | 0 | +-----------+-----+-----+
Inilah yang terjadi jika kita membatasi rentang angka:
SELECT
'123' REGEXP '[1-3]' AS "123",
'012' REGEXP '[1-3]' AS "012",
'045' REGEXP '[1-3]' AS "045";
Hasil:
+-----+-----+-----+ | 123 | 012 | 045 | +-----+-----+-----+ | 1 | 1 | 0 | +-----+-----+-----+
Tidak Dalam Rentang
Kita dapat menggunakan ^
karakter untuk mengubah contoh sebelumnya sehingga rentang karakter tertentu dikecualikan:
SELECT
'123' REGEXP '[^1-3]' AS "123",
'012' REGEXP '[^1-3]' AS "012",
'045' REGEXP '[^1-3]' AS "045";
Hasil:
+-----+-----+-----+ | 123 | 012 | 045 | +-----+-----+-----+ | 0 | 1 | 1 | +-----+-----+-----+
Dalam hal ini kita mendapatkan hasil yang berlawanan dengan contoh sebelumnya.
Nilai Null
Jika ekspresi atau polanya null
, hasilnya null
:
SELECT
null REGEXP 'Corn' AS "Corn",
'Acorn' REGEXP null AS "Acorn",
null REGEXP null AS "Corner";
Hasil:
+------+-------+--------+ | Corn | Acorn | Corner | +------+-------+--------+ | NULL | NULL | NULL | +------+-------+--------+