What did I learn over the holiday?

Budi Rahardjo
22 Desember 2001, v.0.3

Bulan Desember tahun 2001 merupakan bulan dimana banyak liburan, mulai dari adanya puasa, Lebaran, Natalan, dan tentunya akhir tahun 2001 yang dilanjutkan dengan tahun baru. Seperti yang sudah-sudah, saya ambil kesempatan liburan ini untuk membawa keluarga mengunjungi sanak famili. Pada saat yang sama, liburan ini memberi kesempatan kepada saya untuk bebas dari pekerjaan (yeah, right?).

Kesempatan liburan biasanya saya gunakan untuk belajar. You might wonder why I don't call this work, eh? Melihat latar belakang saya, yaitu engineer dan hackers (in a good sense) yang banyak bekerja dari rumah memang samar perbedaan antara kerja dan tidak kerja. Dengar-dengar, Bill Gates juga mengambil kesempatan untuk "liburan" pada setiap tahunnya dengan membaca buku untuk kemudian mengambil keputusan (untuk Microsoft). Anyway, pada liburan saat ini saya mengambil buku "Mastering Regular Expressions" karangan Jeffrey E. F. Friedl (yang diterbitkan oleh O'Reilly) sebagai fokus utama (ada setumpuk buku lain yang juga saya bawa). Saya ingin tahu lebih jauh tentang "Regular Expression" yang sudah biasa saya gunakan.

Apa itu Regular Expression?

Agak susah juga mendefinisikan regular expression, atau sering dikenal dengan kata regex ini. Regular expression merupakan notasi (pattern notation) yang dapat digunakan untuk mengolah teks (describe and parse text). Regex ini mirip sebuah bahasa pemrograman kecil (mini programming language) yang sangat hebat, fleksibel, dan efisien dalam memproses data-data teks.

Regex sering digunakan kalau kalau kita melakukan fungsi "search and replace", searching world wide web, atau mengolah data-data. Regex banyak diimplementasikan di berbagai bahasa seperti awk, elisp, expect, perl, python, tcl, dan masih banyak lainnya. Bahkan beberapa tools, seperti editor vi kesukaan saya, memiliki fasilitas regular expression ini. Adanya fasilitas regular expression inilah yang membuat saya lebih suka editor "vi" dibandingkan degan editor text yang "user friendly". Misalnya untuk menyisipkan karakter "> " di depan setiap baris yang dimulai dari baris nomor 10 sampai dengan baris nomor 90 di editor vi saya cukup mengetikkan

:10,90s/^/> /

Bagaimana anda melakukannya di editor anda?

Bagi anda yang pernah menggunakan DOS, mungkin pernah mengetikkan perintah dir dengan nama file yang menggunakan simbol bintang (asterisk, star) seperti contoh di bawah ini:

C:> dir *.doc

Nah, simbol bintang tersebut digunakan untuk menggantikan semua nama file, dan digabungkan dengan ".doc" menjadi semua nama file yang memiliki akhiran ".doc". Sebetulnya anda juga sudah menggunakan regular expression secara sederhana.

Contoh regular expression yang digunakan dalam buku tersebut ada banyak. Salah satunya adalah mencari "double words" (kata ganda) seperti kata "the the" yang sering kita lakukan tanpa sadar. Bagaimana jika kedua kata tersebut dipisahkan oleh baris yang berbeda? Atau bagaimana jika kedua kata tersebut dipisahkan oleh tanda petik atau tag HTML? Ternyata ada banyak solusi dan ternyata tidak mudah. Suatu saat akan saya buatkan tutorial (atau bahkan buku?) tentang regular expression yang lebih komplit.

Meski saya sudah menggunakan regular expression selama belasan tahun, saya tidak mengetahui "jeroan" (inner working) dari regular expression. Saya hanya sekedar pengguna saja. Nah, saat ini saya sedang membuat tools yang melakukan analisa terhadap berkas log (yang banyak berisi data-data). Saya kesandung beberapa regular expression dalam bahasa perl yang saya gunakan untuk mengimplementasikan beberapa ide. Sempat juga terpikir untuk menggunakan bahasa C dengan menggunakan tools "lex" dan "yacc". Tapi untuk melakukan hal ini membutuhkan pengertian bahasa (grammar) dan juga regular expression. Saya memutuskan untuk menggunakan bahasa perl sebab saya sudah terbiasa dengan bahasa tersebut. Selain itu, saya selalu(?) kurang berhasil dalam menggunakan grammar yang dibutuhkan oleh lex dan yacc. (Ini juga mungkin karena kurang mengerti landasan teorinya, meskipun saya sudah pernah membaca buku standar "Red Dragon" dari Aho dan kawan-kawan.)

Ternyata, banyak sekali yang saya tidak tahu tentang regular expression. Buku "mastering regular expressions" tersebut membuka mata saya tentang jeroan dari regular expression. Sayang sekali saya membaca buku tersebut dalam perjalanan sehingga sulit akses terhadap komputer yang dapat saya gunakan untuk mencoba latihan yang ada di buku tersebut. Saya hanya dapat melakukan latihan secara mental saja. Waktu liburan yang singkat ini (sekitar 1 minggu-an) dan diselingi dengan acara keluarga (which is supposed to be the main focus) menyebabkan buku tersebut belum selesai saya baca. Namun, saya pikir, saya mendapatkan esensi dari beberapa hal tentang regular expression (baik secara teori maupun secara praktek). Saya jadi tahu bagaimana jika dihadapkan tools yang menggunakan basis DFA (Deterministic Finite Automata) atau NFA (Non-deterministic Finite Automata) sebagai basis dari "mesin" regexnya.

Nah, sekarang yang saya pikirkan: "Pelajaran apa yang dipetik murid saya selama liburan ini?" Pertanyaan lain: "Apakah ada orang lain (dosen?) yang juga mempelajari regular expression ini?" Holiday is so much fun!