Thursday, August 27, 2015

REGEXP Pada MySQL


REGEX (Regular Expression) adalah konstruksi bahasa untuk mencocokkan teks berdasarkan pola tertentu, terutama untuk kasus-kasus kompleks. Contoh misalkan mencari teks berawalan karakter tertentu, memiliki jumlah perulangan dari suatu teks, dan lain sebagainya. Selain itu, REGEX juga sangat manjur (powerful) terutama untuk proses penguraian kata (text parsing).

Operator Regular Expression
  1. REGEXP : melakukan pencocokan pola (pattern matching) menggunakan Regular Expresssion.
  2. NOT REGEXP : negasi dari REGEXP.
  3. RLIKE : sama dengan REGEXP.
Jika pada query SELECT..LIKE kita menggunakan pola ‘s%’ sebagai kata kunci yang berarti ‘kata yang diawali dengan huruf s dan memiliki banyak huruf 1 atau lebih’ dalam regular expression, penulisannya menjadi ‘^S.*’. Terlihat sedikit rumit, tapi mari kita pelajari aturan penulisan RegExp:
  • . : tanda titik dalam RegExp berarti sebuah karakter apa saja
  • [ … ] : tanda kurung siku ini berarti kumpulan karakter. Misalkan [abc] akan cocok dengan ‘a’, ‘b’, atau ‘c’. kita bisa juga menggunakan jangkauan (range), contohnya [a-z] akan cocok dengan seluruh huruf, [0-9] akan cocok dengan seluruh angka.
  • : tanda bintang ini akan cocok dengan 0 atau lebih karakter sebelumnya. Misalkan ‘a*’ berarti akan cocok dengan seluruh kata yang mengandung 0 atau lebih a.
  • : tanda pangkat atau topi ini menandakan berada di awal kata.
  • : tanda dollar ini berarti bahwa pola berada di akhir kata.
Format dasar dari query pencarian menggunakan Regular Expression adalah :

SELECT nama_kolom_tampil FROM nama_tabel WHERE nama_kolom_cari REGEXP keyword_reguler_expression

Contoh :

mysql> SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^s.*';
+------------+---------------+------------+-----------+
| NIP        | nama_dosen    | no_hp      | alamat    |
+------------+---------------+------------+-----------+
| 0160436012 | Sabrina Sari  | 0812349900 | Pekanbaru |
| 0275430005 | Susi Indriani | 0812656532 | Bogor     |
+------------+---------------+------------+-----------+
2 rows in set (0.00 sec)

Penggunaan Regular Expression akan diperlukan jika kita butuh pencarian yang lebih rumit. Contohnya kita ingin mencari nama_dosen yang diawali dengan huruf ‘m’ atau ’s’, dan diakhiri dengan huruf vocal. Pencarian seperti ini bisa saja kita lakukan dengan SELECT..LIKE, namun akan menggunakan operator OR yang banyak, karena untuk huruf vocal berarti nama_dosen dapat berakhir dengan huruf a, i, u, e dan o. Dalam Regular Expression, pola itu akan berbentuk: ‘^[ms].*[aiueo]$‘

mysql> SELECT * FROM daftar_dosen WHERE nama_dosen REGEXP '^[ms].*[aiueo]$';
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
+------------+----------------+------------+-----------+
3 rows in set (0.00 sec)

Perhatikan bahwa nama_dosen Mustalifah dan M. Siddiq walaupun berawalan M, namun tidak diakhiri dengan huruf vocal.

"RegExp dalam MySQL akan bersifat case insensitif untuk tipe data CHAR, VARCHAR atau TEXT, dan bersifat case sensitif untuk tipe data tabel BINARY, VARBINARY, atau BLOB."

No comments: