MYSQL Regular Expressions (REGEXP) dengan Sintaks & Contoh

Anonim

Apa itu ekspresi reguler?

Ekspresi Reguler membantu pencarian data yang cocok dengan kriteria kompleks. Kami melihat wildcard di tutorial sebelumnya. Jika Anda pernah bekerja dengan karakter pengganti sebelumnya, Anda mungkin bertanya mengapa mempelajari ekspresi reguler saat Anda bisa mendapatkan hasil yang serupa menggunakan karakter pengganti. Karena, dibandingkan dengan karakter pengganti, ekspresi reguler memungkinkan kita mencari data yang cocok dengan kriteria yang lebih kompleks.

Sintaks dasar

Sintaks dasar untuk ekspresi reguler adalah sebagai berikut

SELECT statements… WHERE fieldname REGEXP 'pattern';

DI SINI -

  • "Pernyataan SELECT…" adalah pernyataan SELECT standar
  • "WHERE fieldname" adalah nama kolom tempat ekspresi reguler akan dijalankan.
  • "REGEXP 'pattern'" REGEXP adalah operator ekspresi reguler dan 'pattern' mewakili pola yang akan dicocokkan dengan REGEXP. RLIKE adalah sinonim dari REGEXP dan mencapai hasil yang sama seperti REGEXP. Untuk menghindari kebingungan dengan operator LIKE, lebih baik gunakan REGEXP sebagai gantinya.

Sekarang mari kita lihat contoh praktis-

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Kueri di atas mencari semua judul film yang memiliki kode kata di dalamnya. Tidak masalah apakah "kode" tersebut di awal, tengah atau akhir judul. Selama ada di dalam judul maka itu akan dipertimbangkan.

Misalkan kita ingin mencari film yang dimulai dengan a, b, c atau d, diikuti oleh sejumlah karakter lain, bagaimana kita akan mencapainya. Kita dapat menggunakan ekspresi reguler bersama dengan karakter meta untuk mencapai hasil yang diinginkan.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Menjalankan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil sebagai berikut.

 
movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Sekarang mari kita lihat lebih dekat ekspresi reguler kita yang bertanggung jawab atas hasil di atas.

'[abcd]' tanda sisipan (^) berarti bahwa kecocokan pola harus diterapkan di awal dan daftar karakter [abcd] berarti bahwa hanya judul film yang dimulai dengan a, b, c, atau d yang dikembalikan dalam set hasil kami.

Mari kita ubah skrip di atas dan gunakan NOT charlist dan lihat hasil apa yang akan kita dapatkan setelah menjalankan kueri kita.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Menjalankan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil sebagai berikut.

 
movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Sekarang mari kita lihat lebih dekat ekspresi reguler kita yang bertanggung jawab atas hasil di atas.

'[abcd]' tanda sisipan (^) berarti bahwa kecocokan pola harus diterapkan di awal dan daftar karakter [abcd] berarti bahwa judul film yang dimulai dengan salah satu karakter yang diapit dikecualikan dari set hasil.

Karakter meta ekspresi reguler

Apa yang kita lihat pada contoh di atas adalah bentuk ekspresi reguler yang paling sederhana. Sekarang mari kita lihat kecocokan pola ekspresi reguler lanjutan. Misalkan kita ingin mencari judul film yang dimulai dengan pola "kode" hanya menggunakan ekspresi reguler, bagaimana kita akan melakukannya? Jawabannya adalah karakter meta. Mereka memungkinkan kami untuk menyempurnakan hasil pencarian pola kami menggunakan ekspresi reguler.

Arang Deskripsi Contoh
* Karakter meta asterisk (*) digunakan untuk mencocokkan nol (0) atau lebih instance dari string sebelumnya PILIH * DARI film DI MANA judul REGEXP 'da *'; akan memberikan semua film yang mengandung karakter "da". Misalnya, Da Vinci Code, Daddy's Little Girls.
+ Karakter meta plus (+) digunakan untuk mencocokkan satu atau lebih instance string sebelumnya. PILIH * DARI `film` DI MANA` judul` REGEXP 'mon +'; akan memberikan semua film yang mengandung karakter "mon". Misalnya, Angels and Demons.
? Pertanyaan (?) Metakarakter digunakan untuk mencocokkan nol (0) atau satu contoh string sebelumnya. PILIH * DARI `kategori` DI MANA` category_name` REGEXP 'com?'; akan memberikan semua kategori yang berisi string com. Misalnya, komedi, komedi romantis.
. Karakter meta titik (.) Digunakan untuk mencocokkan karakter tunggal apa pun kecuali untuk baris baru. PILIH * DARI film DI MANA `year_released` REGEXP '200.'; akan memberikan semua film yang dirilis pada tahun-tahun yang dimulai dengan karakter "200" diikuti oleh karakter tunggal apa pun. Misalnya, 2005,2007,2008 dll.
[abc] Daftar karakter [abc] digunakan untuk mencocokkan salah satu karakter terlampir. PILIH * DARI `film` DI MANA` judul` REGEXP '[vwxyz]'; akan memberikan semua film yang berisi karakter tunggal apa pun di "vwxyz". Misalnya, X-Men, Da Vinci Code, dll.
[abc] Daftar karakter [abc] digunakan untuk mencocokkan semua karakter kecuali yang diapit. PILIH * DARI `film` DI MANA` judul` REGEXP '[vwxyz]'; akan memberikan semua film yang berisi karakter selain yang ada di "vwxyz".
[AZ] The [AZ] digunakan untuk mencocokkan setiap huruf atas. PILIH * DARI `anggota` DI MANA` postal_address` REGEXP '[AZ]'; akan memberikan semua anggota yang memiliki alamat pos yang berisi karakter dari A sampai Z… Misalnya, Janet Jones dengan nomor keanggotaan 1.
[az] The [az] digunakan untuk mencocokkan setiap huruf kecil PILIH * DARI `anggota` DI MANA` postal_address` REGEXP '[az]'; akan memberikan semua anggota yang memiliki alamat pos yang berisi karakter dari a sampai z… Misalnya, Janet Jones dengan nomor keanggotaan 1.
[0-9] The [0-9] digunakan untuk mencocokkan setiap digit dari 0 sampai 9. PILIH * FROM `members` WHERE` contact_number` REGEXP '[0-9]' akan memberikan semua anggota yang telah mengirimkan nomor kontak yang mengandung karakter "[0-9]". Sebagai contoh, Robert Phil.
^ Tanda sisipan (^) digunakan untuk memulai pertandingan di awal. PILIH * DARI `film` DI MANA` judul` REGEXP '[cd]'; memberikan semua film dengan judul yang dimulai dengan salah satu karakter dalam "cd". Misalnya, Nama Kode Hitam, Gadis Kecil Ayah, dan Kode Da Vinci.
| The bar vertikal (|) digunakan untuk alternatif isolat. PILIH * DARI `film` DI MANA` judul` REGEXP '[cd] | [u]'; memberikan semua film dengan judul yang dimulai dengan salah satu karakter dalam "cd" atau "u". Misalnya, Nama Kode Hitam, Gadis Kecil Ayah, Kode Da Vinci, dan Dunia Bawah - Awakening.
[[: <:]] The [[: <:]] pertandingan awal kata-kata. PILIH * DARI `film` DI MANA` judul` REGEXP '[[: <:]] untuk'; memberikan semua film dengan judul yang dimulai dengan karakter. Misalnya: Melupakan Sarah Marshal.
[[:>:]] The [[:>:]] cocok akhir kata. PILIH * DARI `film` DI MANA` judul` REGEXP 'ack [[:>:]]'; memberikan semua film dengan judul yang diakhiri dengan karakter "ack". Misalnya, Nama Kode Hitam.
[:kelas:] The [: class:] cocok dengan kelas karakter yaitu [: alpha:] untuk mencocokkan huruf, [: space:] untuk mencocokkan ruang putih, [: punct:] adalah tanda baca pertandingan dan [: upper:] untuk huruf kelas atas. PILIH * DARI `film` DI MANA` judul` REGEXP '[: alpha:]'; memberikan semua film dengan judul yang hanya berisi huruf. Misalnya, Melupakan Sarah Marshal, X-Men, dll. Film seperti Pirates of the Caribbean 4 akan dihilangkan dengan kueri ini.

Garis miring terbalik (\) digunakan sebagai karakter pelarian. Jika kita ingin menggunakannya sebagai bagian dari pola dalam ekspresi reguler, kita harus menggunakan garis miring terbalik ganda (\\)

Ringkasan

  • Ekspresi reguler memberikan pencocokan pola yang kuat dan fleksibel yang dapat membantu kami menerapkan utilitas pencarian canggih untuk sistem database kami.
  • REGEXP adalah operator yang digunakan saat melakukan pencocokan pola ekspresi reguler. RLIKE adalah sinonimnya
  • Ekspresi reguler mendukung sejumlah karakter meta yang memungkinkan lebih banyak fleksibilitas dan kontrol saat melakukan pencocokan pola.
  • Garis miring terbalik digunakan sebagai karakter pelarian dalam ekspresi reguler. Ini hanya dipertimbangkan dalam pencocokan pola jika garis miring terbalik ganda telah digunakan.
  • Ekspresi reguler tidak peka huruf besar / kecil.