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

Bagaimana REGEXP Bekerja di MariaDB

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 |
+------+-------+--------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menjelajahi Opsi Mesin Penyimpanan untuk MariaDB

  2. Pilihan Mesin Penyimpanan:Aria

  3. Bagaimana LPAD() Bekerja di MariaDB

  4. MariaDB LENGTH() vs LENGTHB():Apa Bedanya?

  5. Enkripsi MariaDB Penuh Saat Istirahat dan Dalam Perjalanan untuk Perlindungan Data Maksimum - Bagian Kedua