Ekspresi Biasa MYSQL (REGEXP) dengan Sintaks & Contoh

Anonim

Apakah ungkapan biasa?

Ungkapan Biasa membantu mencari data yang sesuai dengan kriteria kompleks. Kami melihat wildcard dalam tutorial sebelumnya. Sekiranya anda pernah bekerja dengan wildcard sebelumnya, anda mungkin bertanya mengapa belajar ungkapan biasa apabila anda dapat memperoleh hasil yang serupa dengan menggunakan wildcard. Kerana, berbanding dengan wildcard, ungkapan biasa membolehkan kita mencari data yang sesuai dengan kriteria yang lebih kompleks.

Sintaks asas

Sintaks asas untuk ungkapan biasa adalah seperti berikut

SELECT statements… WHERE fieldname REGEXP 'pattern';

DI SINI -

  • "Pernyataan SELECT ..." adalah pernyataan SELECT standard
  • "WHERE fieldname" adalah nama lajur di mana ungkapan biasa akan dilakukan.
  • "REGEXP 'pattern'" REGEXP adalah operator ekspresi biasa dan 'pattern' mewakili corak yang akan dipadankan oleh REGEXP. RLIKE adalah sinonim untuk REGEXP dan mencapai hasil yang sama dengan REGEXP. Untuk mengelakkan membingungkannya dengan operator LIKE, lebih baik menggunakan REGEXP sebagai gantinya.

Mari kita lihat contoh praktikal-

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

Pertanyaan di atas mencari semua tajuk filem yang mempunyai kod perkataan di dalamnya. Tidak kira sama ada "kod" berada di awal, tengah atau akhir tajuk. Selagi ia terkandung dalam tajuk maka ia akan dipertimbangkan.

Mari kita anggap bahawa kita ingin mencari filem yang bermula dengan huruf a, b, c atau d, diikuti oleh sebilangan besar watak lain, bagaimana kita akan mencapainya. Kita boleh menggunakan ungkapan biasa bersama dengan watak-watak untuk mencapai hasil yang kita inginkan.

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

Melaksanakan skrip di atas di MySQL workbench terhadap myflixdb memberikan hasil 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 perhatikan ungkapan biasa kita yang bertanggungjawab untuk hasil di atas.

'[abcd]' karet (^) bermaksud bahawa padanan corak harus diterapkan pada awal dan senarai main [abcd] bermaksud bahawa hanya tajuk filem yang bermula dengan a, b, c atau d dikembalikan dalam set hasil kami.

Mari ubah skrip kami di atas dan gunakan senarai nama TIDAK dan lihat hasil apa yang akan kami perolehi setelah melaksanakan pertanyaan kami.

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

Melaksanakan skrip di atas di MySQL workbench terhadap myflixdb memberikan hasil 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 perhatikan ungkapan biasa kita yang bertanggungjawab untuk hasil di atas.

'[abcd]' karet (^) bermaksud bahawa padanan corak harus diterapkan pada awal dan senarai main [abcd] bermaksud tajuk filem yang dimulakan dengan mana-mana watak yang dilampirkan dikecualikan dari set hasil.

Metakarakter ungkapan biasa

Apa yang kita perhatikan dalam contoh di atas adalah bentuk ungkapan biasa yang paling sederhana. Sekarang mari kita lihat padanan corak ungkapan biasa yang lebih maju. Andaikan kita ingin mencari judul filem yang bermula dengan corak "kod" hanya menggunakan ungkapan biasa, bagaimana kita akan melakukannya? Jawapannya adalah metacharacters. Mereka membolehkan kita menyesuaikan hasil carian corak kita menggunakan ungkapan biasa.

Char Penerangan Contohnya
* The asterisk (*) metacharacter digunakan untuk memadankan sifar (0) atau lebih kejadian rentetan sebelumnya ia PILIH * DARI filem DI MANA tajuk REGEXP 'da *'; akan memberikan semua filem yang mengandungi watak "da". Contohnya, Da Vinci Code, Daddy's Little Girls.
+ The plus (+) metacharacter digunakan untuk memadankan satu atau lebih kejadian rentetan sebelumnya ia. PILIH * DARI `filem` DI MANA` tajuk `REGEXP 'mon +'; akan memberikan semua filem yang mengandungi watak "mon". Contohnya, Malaikat dan Iblis.
? Metakarakter soalan (?) Digunakan untuk memadankan sifar (0) atau satu contoh rentetan yang mendahuluinya. PILIH * DARI `kategori` DI MANA `kategori_nama` REGEXP 'com?'; akan memberikan semua kategori yang mengandungi string com. Sebagai contoh, komedi, komedi romantis.
. The dot (.) Metacharacter digunakan untuk padan dengan sebarang aksara dalam kecuali baris baru. PILIH * DARI filem DI MANA `year_released` REGEXP '200.'; akan memberikan semua filem yang dikeluarkan pada tahun-tahun bermula dengan watak "200" diikuti oleh mana-mana watak tunggal. Sebagai Contoh, 2005,2007,2008 dll.
[abc] Senarai senarai [abc] digunakan untuk memadankan mana-mana watak yang dilampirkan. PILIH * DARI `filem` DI MANA` tajuk `REGEXP '[vwxyz]'; akan memberikan semua filem yang mengandungi watak tunggal dalam "vwxyz". Sebagai Contoh, X-Men, Da Vinci Code, dll.
[abc] Senarai senarai [abc] digunakan untuk memadankan mana-mana watak kecuali yang dilampirkan. PILIH * DARI `filem` DI MANA` tajuk` REGEXP '[vwxyz]'; akan memberikan semua filem yang mengandungi watak selain daripada yang ada di "vwxyz".
[AZ] The [AZ] digunakan untuk menyesuaikan huruf besar. PILIH * DARI `member` DI MANA` postal_address` REGEXP '[AZ]'; akan memberikan semua ahli yang mempunyai alamat pos yang mengandungi sebarang watak dari A hingga Z… Sebagai contoh, Janet Jones dengan nombor keahlian 1.
[az] The [az] digunakan untuk memadankan sebarang surat kes yang lebih rendah PILIH * DARI `member` DI MANA` postal_address` REGEXP '[az]'; akan memberikan semua anggota yang mempunyai alamat pos yang mengandungi watak dari a hingga z… Sebagai contoh, Janet Jones dengan nombor keahlian 1.
[0-9] The [0-9] digunakan untuk menyesuaikan angka dari 0 hingga 9. PILIH * DARI `member` DI MANA` contact_number` REGEXP '[0-9]' akan memberikan semua ahli telah menyerahkan nombor hubungan yang mengandungi aksara "[0-9]". Contohnya, Robert Phil.
^ The karet (^) digunakan untuk memulakan perlawanan di permulaan. PILIH * DARI `filem` DI MANA` tajuk` REGEXP '[cd]'; memberikan semua filem dengan tajuk bermula dengan mana-mana watak dalam "cd". Contohnya, Code Name Black, Daddy's Little Girls dan Da Vinci Code.
| The bar menegak (|) digunakan untuk mengasingkan alternatif. PILIH * DARI `filem` DI MANA` tajuk `REGEXP '[cd] | [u]'; memberikan semua filem dengan tajuk yang dimulakan dengan mana-mana watak dalam "cd" atau "u". Sebagai Contoh, Code Name Black, Daddy's Little Girl, Da Vinci Code dan Underworld - Awakening.
[[: <:]] The [[: <:]] perlawanan awal perkataan. PILIH * DARI `filem` DI MANA` tajuk` REGEXP '[[: <:]] untuk'; memberikan semua filem dengan tajuk bermula dengan watak. Contohnya: Melupakan Sarah Marshal.
[[:>:]] The [[:>:]] perlawanan akhir perkataan. PILIH * DARI `filem` DI MANA` tajuk` REGEXP 'ack [[:>:]]'; memberikan semua filem dengan tajuk yang diakhiri dengan watak "ack". Contohnya, Code Name Black.
[: kelas:] The [: Kelas:] perlawanan watak kelas iaitu [: alfa:] sepadan huruf, [: ruang:] sepadan ruang putih, [: punct:] adalah tanda baca perlawanan dan [: atas:] huruf kelas atas. PILIH * DARI `filem` DI MANA` tajuk `REGEXP '[: alpha:]'; memberikan semua filem dengan judul yang mengandungi huruf sahaja. Contohnya, Melupakan Sarah Marshal, X-Men dll. Filem seperti Pirates of the Caribbean 4 akan dihilangkan oleh pertanyaan ini.

Tanda miring terbalik (\) digunakan sebagai watak pelarian. Sekiranya kita ingin menggunakannya sebagai sebahagian daripada corak dalam ungkapan biasa, kita harus menggunakan garis miring terbalik berganda (\\)

Ringkasan

  • Ungkapan biasa memberikan padanan corak yang kuat dan fleksibel yang dapat membantu kami melaksanakan utiliti carian kuasa untuk sistem pangkalan data kami.
  • REGEXP adalah operator yang digunakan semasa melakukan pertandingan corak ekspresi biasa. RLIKE adalah sinonim
  • Ungkapan biasa menyokong sejumlah metakarakter yang memungkinkan lebih banyak fleksibiliti dan kawalan ketika melakukan pertandingan corak.
  • Tanda miring terbalik digunakan sebagai watak pelarian dalam ungkapan biasa. Ini hanya dipertimbangkan dalam pertandingan corak jika garis miring terbalik berganda telah digunakan.
  • Ungkapan biasa tidak peka huruf besar kecil.