Di MySQL, REGEXP
operator digunakan untuk menentukan apakah string cocok atau tidak dengan ekspresi reguler. Ini adalah sinonim untuk REGEXP_LIKE()
.
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 Anda uji stringnya.
Contoh 1 – Ekspresi Reguler Dasar
Ekspresi reguler paling dasar 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.
PILIH 'Jagung' REGEXP 'Jagung' SEBAGAI 'Jagung', 'Acorn' REGEXP 'Jagung' AS 'Acorn', 'Pojok' REGEXP 'Jagung' SEBAGAI 'Pojok', 'Keju' REGEXP 'Jagung' SEBAGAI 'Keju ';
Hasil:
+------+-------+--------+--------+| Jagung | biji pohon ek | Pojok | Keju |+------+-------+--------+--------+| 1 | 1 | 1 | 0 |+------+-------+--------+--------+
Contoh 2 – Mencocokkan Awal Sebuah String
Dalam contoh ini, ekspresi reguler menetapkan bahwa string harus dimulai dengan Co
.
PILIH 'Corn' REGEXP '^Co' AS 'Corn', 'Acorn' REGEXP '^Co' AS 'Acorn', 'Cheese' REGEXP '^Co' AS 'Cheese';
Hasil:
+------+-------+--------+| Jagung | biji pohon ek | Keju |+------+-------+--------+| 1 | 0 | 0 |+------+-------+--------+
Contoh 3 – Mencocokkan Ujung String
Dalam contoh ini, ekspresi reguler menetapkan bahwa string harus diakhiri dengan rn
.
PILIH 'Jagung' REGEXP 'rn$' AS 'Jagung', 'Acorn' REGEXP 'rn$' AS 'Acorn', 'Cheese' REGEXP 'rn$' AS 'Cheese';
Hasil:
+------+-------+--------+| Jagung | biji pohon ek | Keju |+------+-------+--------+| 1 | 1 | 0 |+------+-------+--------+
Contoh 4 – Cocokkan Semua Karakter
.
karakter cocok dengan karakter apa pun.
PILIH 'Jagung' REGEXP '.' SEBAGAI 'Jagung', 'Keju' REGEXP '.' SEBAGAI 'Keju', '' REGEXP '.' SEBAGAI '';
Hasil:
+------+--------+---+| Jagung | keju | |+------+--------+---+| 1 | 1 | 0 |+------+----+---+
Karakter ini biasanya digunakan bersama dengan karakter lain untuk menentukan kriteria lebih lanjut. Misalnya:
PILIH 'Jagung' REGEXP '^C.rn$' AS 'Jagung', 'Crn' REGEXP '^C.rn$' AS 'Crn';
Hasil:
+------+-----+| Jagung | 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.
Contoh 5 – Mencocokkan 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 | Tweet | Twt | Twit | Twit | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+
Empat pertandingan pertama tetapi tiga pertandingan terakhir tidak.
Contoh 6 – Mencocokkan 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 | Tweet | Twt | Twit | Twit | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 0 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+
Dalam hal ini, kata keempat mengembalikan hasil yang berbeda dengan contoh sebelumnya.
Contoh 7 – Mencocokkan 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 | Tweet | Twt | Twit | Twit | Tweit |+------+-------+--------+-----+------+-------+-- -----+| 1 | 0 | 0 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+
Contoh 8 – Pergantian
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 | Untuk Biarkan | Pisang |+-------+--------+--------+| 1 | 1 | 0 |+-------+--------+--------+Berikut ini contoh lain di mana saya mencari seluruh kata:
PILIH 'Kucing' REGEXP 'Kucing|Anjing' SEBAGAI 'Kucing', 'Anjing' REGEXP 'Kucing|Anjing' SEBAGAI 'Anjing', 'Anjing' REGEXP 'Kucing|Anjing' SEBAGAI 'Anjing', 'Pisang' REGEXP 'Kucing|Anjing' SEBAGAI 'Pisang';Hasil:
+-----+-----+--------+--------+| Kucing | Anjing | Anjing | Pisang |+-----+-----+--------+--------+| 1 | 1 | 1 | 0 |+-----+-----+---------+--------+Kami masih mendapatkan kecocokan meskipun ekspresi reguler kami hanya cocok dengan sebagian dari string.
Contoh 9 – Mencocokkan 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:
+--------+------+--------+| pisang | tanah | Keju |+--------+------+--------+| 1 | 1 | 1 |+--------+------+--------+Contoh lain:
SELECT 'Banana' REGEXP '^B(an)*d$' AS 'Banana', 'Band' REGEXP '^B(an)*d$' AS 'Band', 'Botak' REGEXP '^B( an)*d$' AS 'Botak', 'Buruk' REGEXP '^B(an)*d$' AS 'Buruk';Hasil:
+--------+------+------+-----+| pisang | Band | botak | Buruk |+--------+------+------+-----+| 0 | 1 | 0 | 0 |+--------+------+------+-----+Contoh 10 – 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:
PILIH 'Tweeet' REGEXP 'e{3}' AS 'Tweeet', 'Tweet' REGEXP 'e{3}' AS 'Tweet';Hasil:
+--------+-------+| Tweet | Tweet |+--------+-------+| 1 | 0 |+--------+-------+Contoh 11 – 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:
+--------+-------+| Tweet | 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 | Tweet |+--------+-------+| 1 | 0 |+--------+-------+Inilah yang terjadi jika kita membatasi rentang angka:
PILIH '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 |+-----+-----+-----+Contoh 12 – Tidak Dalam Rentang
Kita dapat menggunakan
^
karakter untuk mengubah contoh sebelumnya sehingga rentang karakter tertentu dikecualikan:PILIH '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 |+-----+-----+-----+Jadi kita mendapatkan hasil yang berlawanan dengan contoh sebelumnya.