Skip to main content
๐Ÿš€ nusa.id cloud server linux indonesialihat paket

Menggunakan Regular Expression (REGEXP) di MySQL

ยท 5 min read

MySQL menyediakan fungsi REGEXP untuk pencarian teks berbasis pola (regular expression). Berbeda dengan LIKE yang hanya mendukung wildcard sederhana (% dan _), REGEXP mampu mencocokkan pola kompleks seperti awal/akhir string, rentang karakter, kelas karakter, dan banyak lagi.

Panduan ini akan membahas penggunaan REGEXP di MySQL dengan contoh praktis yang bisa langsung diterapkan di Nusa Cloud VPS.

Prasyaratโ€‹

  • Server Nusa Cloud VPS dengan MySQL 8.0 atau lebih baru
  • Akses ke MySQL sebagai user dengan hak SELECT, INSERT, dan ALTER

Catatan: REGEXP didukung penuh di MySQL 8.0.x. Contoh dalam panduan ini menggunakan sintaks yang kompatibel dengan MySQL 8.0 ke atas.

Siapkan Data Uji Cobaโ€‹

Buat database dan tabel untuk praktik:

CREATE DATABASE regex_db;
USE regex_db;

CREATE TABLE customers (
customer_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(255)
) ENGINE = InnoDB;

INSERT INTO customers (first_name, last_name, email) VALUES
('JANE', 'SMITH', 'jane@example.com'),
('MARY', 'ROE', '-'),
('JOHN', 'DOE', 'john_doe@example.com'),
('MARY', 'FREDRICK', ''),
('BANNIE', 'ISAAC', 'bannie_isaac@example.com');

1. Mencocokkan Awal String (^)โ€‹

Karakter ^ mencocokkan posisi awal string. Gunakan untuk mencari record yang diawali pola tertentu.

Cari semua first_name yang diawali huruf J:

SELECT customer_id, first_name, last_name
FROM customers
WHERE first_name REGEXP '^J';

Hasil:

+-------------+------------+-----------+
| customer_id | first_name | last_name |
+-------------+------------+-----------+
| 1 | JANE | SMITH |
| 3 | JOHN | DOE |
+-------------+------------+-----------+

2. Mencocokkan Akhir String ($)โ€‹

Karakter $ mencocokkan posisi akhir string. Gunakan untuk mencari record yang diakhiri pola tertentu.

Cari last_name yang diakhiri OE:

SELECT customer_id, first_name, last_name
FROM customers
WHERE last_name REGEXP 'OE$';

Hasil:

+-------------+------------+-----------+
| customer_id | first_name | last_name |
+-------------+------------+-----------+
| 2 | MARY | ROE |
| 3 | JOHN | DOE |
+-------------+------------+-----------+

3. Mencocokkan Karakter dalam Kurung Siku ([])โ€‹

Kurung siku [abc] mencocokkan salah satu karakter yang disebutkan di dalamnya. Berguna untuk mencari record yang mengandung variasi karakter tertentu.

Cari first_name yang mengandung huruf H atau Y:

SELECT customer_id, first_name, last_name
FROM customers
WHERE first_name REGEXP '[HY]';

Hasil:

+-------------+------------+-----------+
| customer_id | first_name | last_name |
+-------------+------------+-----------+
| 2 | MARY | ROE |
| 3 | JOHN | DOE |
| 4 | MARY | FREDRICK |
+-------------+------------+-----------+

4. Rentang Karakter (-)โ€‹

Tanda hubung - di dalam kurung siku menentukan rentang karakter, misalnya [a-d] (a sampai d) atau [0-9] (angka 0โ€“9).

Cari first_name yang mengandung huruf a sampai d:

SELECT customer_id, first_name, last_name
FROM customers
WHERE first_name REGEXP '[a-d]';

Hasil:

+-------------+------------+-----------+
| customer_id | first_name | last_name |
+-------------+------------+-----------+
| 1 | JANE | SMITH |
| 2 | MARY | ROE |
| 4 | MARY | FREDRICK |
| 5 | BANNIE | ISAAC |
+-------------+------------+-----------+

5. Mencocokkan Substringโ€‹

Tanpa anchor (^ atau $), REGEXP mencari pola di posisi mana pun dalam string. Cari nama yang mengandung substring AN dalam urutan tersebut:

SELECT customer_id, first_name, last_name
FROM customers
WHERE first_name REGEXP 'AN';

Hasil:

+-------------+------------+-----------+
| customer_id | first_name | last_name |
+-------------+------------+-----------+
| 1 | JANE | SMITH |
| 5 | BANNIE | ISAAC |
+-------------+------------+-----------+

Untuk substring di posisi tertentu (dua karakter diikuti "NE"):

SELECT customer_id, first_name, last_name
FROM customers
WHERE first_name REGEXP '^..NE';

6. Menggunakan REGEXP dengan UPDATEโ€‹

REGEXP tidak hanya untuk SELECT. Anda bisa menggunakannya di UPDATE untuk mengubah data berdasarkan pola.

Tambah kolom address dan zip:

ALTER TABLE customers
ADD address VARCHAR(255) AFTER email,
ADD zip VARCHAR(20) AFTER address;

Update data alamat:

UPDATE customers SET address = '123 FIRST RD. TOWN 1 AZ 8659' WHERE customer_id = 1;
UPDATE customers SET address = '456 2ND RD. TOWN 2 AZ 12345' WHERE customer_id = 2;
UPDATE customers SET address = '789 3RD RD. TOWN 3 AZ 8659' WHERE customer_id = 3;
UPDATE customers SET address = '555 FIRST RD. TOWN 1 AZ 8659' WHERE customer_id = 4;
UPDATE customers SET address = '987 FIFTH RD TOWN 2 1414' WHERE customer_id = 5;

Sekarang extract kode pos 8659 dari kolom address:

UPDATE customers
SET zip = '8659'
WHERE address REGEXP '8659$';

7. Karakter Negasiโ€‹

Gunakan [^...] di dalam kurung siku untuk mencocokkan karakter yang bukan yang disebutkan.

Cari last_name yang mengandung karakter selain huruf โ€” misalnya tanda hubung atau apostrof:

SELECT customer_id, first_name, last_name
FROM customers
WHERE last_name REGEXP '[^A-Za-z]';

Untuk mencari string yang tidak mengandung pola tertentu, gunakan NOT REGEXP:

SELECT customer_id, first_name, last_name
FROM customers
WHERE last_name NOT REGEXP 'E';

Hasil:

+-------------+------------+-----------+
| customer_id | first_name | last_name |
+-------------+------------+-----------+
| 5 | BANNIE | ISAAC |
+-------------+------------+-----------+

8. Membersihkan Data Uji Cobaโ€‹

Setelah selesai, hapus database uji coba:

DROP DATABASE IF EXISTS regex_db;

Troubleshootingโ€‹

Query REGEXP tidak mengembalikan hasil yang diharapkan

  • Penyebab: REGEXP di MySQL bersifat case-insensitive untuk karakter alfabet. Pola [A-Z] juga akan mencocokkan huruf kecil.
  • Solusi: Jika perlu case-sensitive, gunakan REGEXP BINARY.

Error menggunakan karakter khusus seperti . atau *

  • Penyebab: Karakter tersebut memiliki arti khusus dalam regex. Titik (.) mencocokkan karakter apa pun, * berarti nol atau lebih pengulangan.
  • Solusi: Escape dengan backslash: \\. untuk mencocokkan titik literal.

Catatan Pentingโ€‹

SimbolFungsi
^Awal string
$Akhir string
.Karakter tunggal (wildcard)
[abc]Salah satu karakter a, b, atau c
[a-z]Rentang karakter a sampai z
[^abc]Bukan a, b, atau c
*Nol atau lebih pengulangan
+Satu atau lebih pengulangan
|Operator OR (pola1|pola2)

Kesimpulanโ€‹

MySQL REGEXP sangat berguna untuk pencarian data kompleks yang tidak bisa dijangkau LIKE. Mulai dari validasi format data, filter record, hingga update massal berdasarkan pola โ€” REGEXP menjadi alat andalan dalam administrasi database.

Gunakan Nusa Cloud VPS sebagai infrastruktur database MySQL Anda untuk performa dan keandalan maksimal.