Penyebab Ekspresi Reguler (Regex) Gagal Cocok: Bendera Flag, Multiline & Karakter Escape
Daftar Isi
1. Diagnosis Utama: Mengapa Pola Regex yang Valid Gagal Mencocokkan Teks?
Ketika pola regex yang Anda susun tidak melempar sintaks error namun menghasilkan 'nol kecocokan' (0 matches), masalahnya jarang disebabkan oleh logika pola dasar. Dalam praktik pengembangan perangkat lunak, kegagalan pencocokan hampir selalu disebabkan oleh salah satu dari empat faktor lingkungan:
- Ketiadaan atau Kesalahan Bendera (Flags): Tidak mengaktifkan bendera global
g, multilinem, atau dotAlls. - Perilaku Karakter Jangkar (^ dan $): Mengasumsikan bahwa
^dan$mencocokkan setiap baris teks, padahal secara default keduanya hanya mencocokkan awal dan akhir dari seluruh dokumen string. - Karakter Akhir Baris Windows (CRLF vs. LF): Perbedaan tak kasat mata antara
\r\ndan\nyang menggagalkan jangkar akhir baris. - Jebakan Pelarian Karakter Khusus (Escaping): Lupa melarikan karakter bermakna khusus regex seperti titik (
.), kurung siku ([ ]), atau tanda tambah (+).
2. Empat Bendera (Flags) Esensial: g, i, m, dan s
| Bendera (Flag) | Nama Resmi | Fungsi Utama | Kesalahan Umum Pengembang |
|---|---|---|---|
g |
Global | Menemukan seluruh kecocokan, bukan hanya berhenti pada kecocokan pertama | Hanya mencocokkan kata pertama pada dokumen panjang |
i |
Case-Insensitive | Mengabaikan perbedaan huruf besar dan huruf kecil (A-Z sama dengan a-z) | Pola apple gagal mencocokkan Apple |
m |
Multiline | Mengubah ^ dan $ agar mencocokkan awal/akhir setiap baris |
Tertukar dengan flag s (mengira flag m membuat titik mencocokkan garis baru) |
s |
dotAll (Single-line) | Membuat karakter titik (.) dapat mencocokkan karakter garis baru (\n) |
Pola <div>.*</div> gagal jika tag membentang di beberapa baris |
Jangan Pernah Tertukar antara 'm' dan 's': Ini adalah kebingungan paling luas di kalangan pengembang. Flag m hanya memengaruhi perilaku simbol jangkar ^ dan $. Flag m tidak membuat titik (.) mencocokkan garis baru. Untuk membuat titik dapat melompati baris baru, Anda wajib mengaktifkan flag s (dotAll).
3. Kuantor Rakus (Greedy) vs. Malas (Lazy)
Masalah Kuantor Terlalu Rakus (Greedy Match)
Jika Anda memiliki teks: <b>Pertama</b> dan <b>Kedua</b>
Pola rakus: <b>.*</b> akan mencocokkan dari awal tag <b> pertama hingga tag </b> paling terakhir (mencakup seluruh teks di tengahnya).
Solusi: Gunakan kuantor malas (lazy) dengan menambahkan tanda tanya: <b>.*?</b> agar mesin berhenti pada tag penutup terdekat.
Alat Pengembang Terkait di GoToolstack
- Penguji Ekspresi Reguler (Regex): Uji dan verifikasi pola regex dengan penjelas token real-time.
- Pemformat & Validator JSON: Rapikan dan validasi sintaksis struktur data JSON Anda.
- Penghitung Kata & Karakter: Analisis jumlah kata dan karakter teks secara instan.