Cara Berpikir Saya Memahami Regular Expression
Cara saya berpikir mugi-mugi menjadi penolong pembaca memahami pattern regex. Cara berpikir != cara kerja regex. Penuh opini.
Dot
Matches any character except line breaks
Diberikan sebuah pattern sebagai berikut.
'.+'
Dari kiri-ke-kanan, bila kita step-by-step mengeksekusi setiap bagian terkecil dari pattern maka akan seperti dibawah ini.
(1) yang diawali dengan tanda kutip,
(2) lalu, diikuti sebuah karakter apa saja kecuali line breaks,
(3) dengan tanda +
maka makna sebuah menjadi 1-or-more
Saya membayangkan pattern '.+
adalah sebuah iterasi while (char != “line break”)
yang dimulai dari karakter setelah tanda kutip. Sehingga akan sinkron antara cara berpikir saya dengan gambar di atas.
Ada 2 tanda kutip di teks kita, seharusnya 2 match tetapi melihat pojok kanan atas gambar memberi informasi hanya ada 1 match.
‘aaaaa abbbbb’ aaaaggg
(1)
’ aaaaggg
(2)
Mengingat '
juga termasuk ke dalam DOT dan mungkin yang sudah ter-highlight tidak bisa di-highlight dua kali, tidak bisa tumpang tindih. Maka saya pun bisa berpikir yang areanya paling jauh itu yang diambil.
(4) terakhir diakhiri dengan tanda kutip (‘)
dari langkah #3 kita tau highlight-nya memanjang hingga akhir baris lalu menyusut hingga menemukan tanda kutip. Seakan-akan iterasi while mundur sampai menemukan karakter yang diinginkan.
Grouping
bila menemukan pattern seperti (a|b|c)
maka seakan seperti:
if (char = 'a' OR char = 'b' OR char = 'c')
ini untuk sebuah karakter.
Apabila ditambah tanda +
sehingga menjadi (a|b|c)+
maka akan seperti:
while (char = 'a' OR char = 'b' OR char = 'c')
dan highlight akan berhenti ketika false.
Arti match adalah teks yang cocok dengan pattern kita. Di bawah adalah 2 match.