Ekspresi Reguler untuk Manusia: Panduan Praktis
Ekspresi reguler (regex) memiliki masalah reputasi. Mereka terlihat seperti seseorang tertidur di keyboard: ^[\w.-]+@[\w-]+\.[\w.]+$. Mereka muncul dalam ulasan kode, editor teks, alat pencarian, dan validasi formulir. Pengembang entah mencintai atau sama sekali menghindarinya.
Kebenarannya ada di antara keduanya. Regex memang sangat powerful. Dan juga memang membingungkan pada awalnya. Tetapi Anda tidak perlu menguasai setiap fitur yang tidak umum untuk mendapatkan nilai praktis. Segelintir pola mencakup sebagian besar kasus penggunaan dunia nyata.
Apa yang Sebenarnya Dilakukan Regex
Ekspresi reguler adalah pola yang menggambarkan sekumpulan string. Anda memberikannya ke alat pencarian, dan itu menemukan setiap string yang cocok dengan pola tersebut. Anggap itu sebagai kueri pencarian yang sangat presisi.
Pencarian normal: temukan persis "halo" Pencarian regex: temukan apa pun yang terlihat seperti alamat email, nomor telepon, tanggal, URL, atau pola lain yang dapat Anda deskripsikan.
Tahukah Anda? Ekspresi reguler ditemukan oleh matematikawan Stephen Kleene pada tahun 1956 sebagai notasi untuk menggambarkan "bahasa reguler" dalam teori bahasa formal. Mereka masuk ke komputasi melalui editor teks Unix awal pada tahun 1960-an dan 1970-an.
Blok Pembangun
Karakter Literal
Regex paling sederhana adalah teks literal saja. Pola halo cocok dengan string "halo." Tidak ada yang mewah.
Titik (.) — Karakter Tunggal Apa Pun
Titik cocok dengan karakter tunggal apa pun (kecuali baris baru).
h.tcocok dengan "hat," "hit," "hot," "hut," bahkan "h3t"
Kelas Karakter ([]) — Karakter Spesifik
Kurung siku mendefinisikan sekumpulan karakter yang diizinkan pada posisi tersebut.
[aeiou]cocok dengan vokal tunggal mana pun[0-9]cocok dengan digit mana pun[A-Za-z]cocok dengan huruf mana pun (besar atau kecil)[^0-9]cocok dengan karakter mana pun yang BUKAN digit (tanda^di dalam kurung berarti "bukan")
Kuantifier — Berapa Banyak
Simbol-simbol ini mengontrol pengulangan:
| Simbol | Makna | Contoh | Cocok dengan |
|---|---|---|---|
* |
Nol atau lebih | ab*c |
"ac," "abc," "abbc," "abbbc" |
+ |
Satu atau lebih | ab+c |
"abc," "abbc," "abbbc" (bukan "ac") |
? |
Nol atau satu | colou?r |
"color" dan "colour" |
{3} |
Tepat 3 | a{3} |
"aaa" |
{2,4} |
Antara 2 dan 4 | a{2,4} |
"aa," "aaa," "aaaa" |
Jangkar — Posisi
^di awal berarti "awal string"$di akhir berarti "akhir string"^halo$hanya cocok dengan string "halo," bukan "katakan halo" atau "halo dunia"
Kelas Singkat
Kelas karakter umum memiliki pintasan:
| Singkat | Setara | Makna |
|---|---|---|
\d |
[0-9] |
Digit apa pun |
\w |
[A-Za-z0-9_] |
Karakter "kata" apa pun |
\s |
[ \t\n\r] |
Spasi putih apa pun |
\D |
[^0-9] |
Non-digit apa pun |
\W |
[^A-Za-z0-9_] |
Karakter non-kata apa pun |
\S |
[^ \t\n\r] |
Non-spasi putih apa pun |
Grup (()) — Pengelompokan dan Penangkapan
Tanda kurung mengelompokkan bagian-bagian pola. Ini berguna untuk menerapkan kuantifier ke grup atau untuk mengekstrak bagian tertentu dari kecocokan.
(ab)+cocok dengan "ab," "abab," "ababab"(\d{3})-(\d{4})cocok dengan "555-1234" dan menangkap "555" dan "1234" secara terpisah
Pipa (|) — Atau
Pipa berarti "atau."
kucing|anjingcocok dengan "kucing" atau "anjing"(jpg|png|gif)cocok dengan salah satu dari tiga ekstensi gambar ini
Pola Praktis yang Bisa Anda Gunakan Hari Ini
Cocokkan Alamat Email (Sederhana)
[\w.-]+@[\w-]+\.[\w.]+
Penjelasannya:
[\w.-]+— satu atau lebih karakter kata, titik, atau tanda pisah (bagian lokal)@— tanda @ literal[\w-]+— satu atau lebih karakter kata atau tanda pisah (domain)\.— titik literal (di-escape karena.adalah karakter khusus)[\w.]+— satu atau lebih karakter kata atau titik (TLD)
Peringatan Validasi email dengan regex sangat sulit dilakukan dengan sempurna. Pola sederhana di atas mencakup 99% alamat email dunia nyata tetapi tidak menangani setiap kasus tepi yang didefinisikan dalam spesifikasi RFC. Untuk validasi produksi, gunakan perpustakaan validasi email bahasa pemrograman Anda.
Cocokkan Nomor Telepon (Format Indonesia)
(\+62|0)\d{8,12}
Ini cocok dengan:
- +6281234567890
- 081234567890
- 08123456789
Cocokkan URL
https?://[\w.-]+(/[\w./-]*)?
Ini cocok dengan:
Cocokkan Tanggal (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
Ini cocok dengan: 2026-03-23, 1999-12-31, dst.
Temukan Kata yang Terduplikasi
\b(\w+)\s+\1\b
Ini cocok dengan kata yang berulang seperti "yang yang" atau "adalah adalah." \1 merujuk kembali ke apa pun yang ditangkap oleh grup pertama.
Cocokkan Alamat IPv4
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Ini cocok dengan pola seperti 192.168.1.1 atau 10.0.0.255.
Tips Menulis Regex
1. Mulai Sederhana, Lalu Sempurnakan
Jangan mencoba menulis regex yang sempurna pada percobaan pertama. Mulai dengan pola yang luas, uji terhadap data Anda, dan persempitnya.
2. Selalu Uji
Regex mudah salah. Kuantifier yang hilang atau titik yang tidak di-escape dapat sepenuhnya mengubah apa yang cocok. Selalu uji pola Anda terhadap data dunia nyata sebelum menggunakannya dalam produksi.
3. Escape Karakter Khusus
Jika Anda perlu mencocokkan titik literal, tanda kurung, kurung siku, atau karakter khusus lainnya, escape dengan backslash: \., \(, \[.
4. Gunakan Komentar dan Grup Bernama
Dalam pola yang kompleks, gunakan grup bernama dan komentar (jika didukung) untuk membuat regex mudah dibaca. Diri Anda di masa depan akan berterima kasih.
5. Tahu Kapan Tidak Menggunakan Regex
Regex adalah alat yang salah untuk menguraikan HTML, XML, JSON, atau struktur bersarang apa pun. Gunakan parser yang tepat untuk itu.
Tips Uji dan debug pola regex Anda secara real time: Cara Menguji Pola Regex. Tempel pola dan data uji Anda, dan lihat kecocokan yang disorot secara instan.
Mulai menguji regex sekarang:
Gratis, umpan balik instan, dan tidak perlu daftar.