Banyak programmer mengetahui kegembiraan membuat ekspresi reguler yang cepat, akhir-akhir ini sering kali dengan bantuan beberapa layanan web, atau lebih tradisional pada prompt interaktif, atau mungkin menulis skrip kecil yang memiliki ekspresi reguler dalam pengembangan, dan kumpulan kasus uji . Dalam kedua kasus tersebut, prosesnya berulang dan cukup cepat: tetap meretas string yang tampak samar sampai cocok dan menangkap apa yang Anda inginkan dan akan menolak apa yang tidak Anda inginkan.
Untuk kasus sederhana, hasilnya mungkin seperti ini, sebagai regexp Java:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
Banyak programmer juga tahu sakitnya harus mengedit ekspresi reguler, atau hanya kode sekitar ekspresi reguler dalam basis kode legacy. Dengan sedikit pengeditan untuk membaginya, regexp di atas masih sangat mudah dipahami bagi siapa pun yang cukup akrab dengan regexps, dan seorang veteran regexp harus segera melihat apa yang dilakukannya (jawab di akhir posting, kalau-kalau ada yang menginginkan latihan tersebut) mencari tahu sendiri).
Namun, hal-hal yang tidak perlu menjadi jauh lebih kompleks untuk regexp menjadi hal yang benar-benar hanya untuk menulis, dan bahkan dengan dokumentasi yang rajin (yang semua orang tentu saja lakukan untuk semua regexps kompleks yang mereka tulis ...), memodifikasi regexps menjadi sebuah tugas yang menakutkan. Ini bisa menjadi tugas yang sangat berbahaya juga, jika regexp tidak diuji unit dengan hati-hati (tetapi setiap orang tentu saja memiliki tes unit komprehensif untuk semua regexps kompleks mereka, baik positif maupun negatif ...).
Jadi, singkatnya, apakah ada solusi baca-tulis / alternatif untuk ekspresi reguler tanpa kehilangan kekuatannya? Bagaimana regexp di atas akan terlihat seperti dengan pendekatan alternatif? Bahasa apa pun baik-baik saja, meskipun solusi multi-bahasa adalah yang terbaik, sampai tingkat regexps multi-bahasa.
Dan kemudian, apa yang dilakukan regexp sebelumnya adalah ini: parsing string angka dalam format 1:2:3.4
, menangkap setiap angka, di mana spasi diizinkan dan hanya 3
diperlukan.