Regex, Apakah Sehoror Urban Legend?

Beberapa programmer agak kejang-kejang gimana gitu pas berhadapan atau seenggaknya mulai belajar Regex.

Bahkan saya yakin kebanyakan sepakat kalau regex itu bukan bahasa yang ‘normal’.

regex

Bayangin aja, ini salah satu sintaksnya.

/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

Aw aw AW! Apaan ituh! Mantra buat manggil demit aja kayaknya gak seserem itu, malah demitnya yang bakal kabur kalau liat mantra begitu.

Yaudah kita coba kenalan baik-baik aja sama si Regex ini.

Apa Itu REGEX

Regex itu singkatan dari “Regular Expression”.

Apaan?! Sintaks serem begitu kok “Regular”?!

Dan sebenernya Regex ini nggak bener-bener bahasa pemrograman. Cuma suplemen aja buat bahasa pemrograman yang mengadopsinya.

Karena diadopsi pula, perlakuan setiap bahasa pemrograman yang mengadopsi regex ini bisa berbeda-beda. *duh mampus degueh

Maksudnya berbeda-beda itu, bedanya cuma sedikit kok. Mirip banget kayak browser yang adopsi JavaScript sebagai bahasa pemrograman mereka, tapi nggak semua browser kompak implementasi fiturnya. Cuma ya seenggaknya… fitur dasar Javascript pasti berfungsi lah di semua browser, kecuali Opera Mini.

Nah regex pun begitu.

Dan tujuan regex itu apaan sih? Kok orang sampe buat bahasa seserem itu.

Tujuan regex simpel, cuma buat cari sesuatu yang kita pengen di tumpukan huruf aja, atau String.

Cara Mudah Belajar Regex

Biar gampang, saya bagi pembelajaran regex itu per kasta. Ya ampun diskriminatifnya…

Tapi percaya deh, nanti kalau sudah paham Regex, mungkin saat kita ingin cari sesuatu di setumpuk String pake regex bakalan lebih bersyukur daripada nggak pake regex.

Sebutuhnya aja dulu. Kalau belum butuh ya jangan dipake, kok gitu aja pusing hehe…

Saya cuma ingin kasih tau aja untuk kasta terendah penggunaan regex ya.

Oh iya, formula regex itu mau di bahasa pemrograman mana pun semuanya (kayaknya) sama.

Selalu /sintaks_regex/flag_regex

Perhatikan tabel berikut, huruf yang saya beri warna di kolom kasus berarti cocok atau ketemu. Oh iya, karakter di sini termasuk spasi dkk ya…

Dan satu lagi, Regex itu bersifat case sensitif selama flag case insensitivenya nggak diaktifin manual. Harap hati-hati ya huruf gede-kecilnya.

Kasta I: Pencocokkan Biasa

Sintaks Contoh Kasus Fungsi
karakter apapun /a/ Saya adalah programmer Cari kata yang terkandung (huruf ‘a’)
/ay/ Saya adalah programmer Cari kata yang terkandung (kata ‘ay’)
Kurung kotak /[ay]/ Saya adalah programmer Cari huruf/karakter apa pun dalam kurung kotak.
Caret dalam kurung kotak /[^ay]/ Saya adalah programmer Cari karakter apa pun dalam tidak ada di kurung kotak.
Strip dalam kurung kotak /[a-h]/ Saya adalah programmer Cari karakter dari “a” sampai “h”. Berlaku juga bilangan seperti 0-9.
Garis pipa /aba|ada/ aba aca ada afa Cari “aba” atau “ada”.
Dalam kurung /a(b|d)a/ aba aca ada afa Cari karakter “a”, terus karakter entah “b” atau “d”, diakhiri “a”.

Udah itu aja, gampang kan?

Dan masih belum pake karakter yang ribet-ribet kayak contoh di yang pertama kali itu.

Nah sekarang ke bagian yang lebih menarik.

Kasta II: Syarat Bilangan

Kasta berikutnya ini lebih mengarah ke berapa banyak.

Misalnya, saya ingin dapetin kota yang depannya CI dan belakangnya AN, terserah di antara itu ingin ada huruf apa aja yang penting ada huruf.

Nah di sinilah kasta berikutnya bermain.

Sintaks Contoh Kasus Fungsi
Titik (seluruh karakter) /./ Saya adalah programmer Cari karakter apa pun, termasuk spasi & simbol.
Plus (minimal satu) /S.+a/ Saya adalah programmer Cari kata yang diawali “S”, terus apa pun minimal satu buah, dan diakhiri “a”.
Asterik (nggak ada juga nggak apa) /ad.*alah/ Saya adalah programmer Cari kata yang diawali “ad”, terus apa pun nggak ada juga nggak apa, dan diakhiri “alah”.
Kurung kurawal /m{2}/ Saya adalah programmer Cari huruf “m” yang ada dua bertempelan.
/m{1,3}/ Saya adalah programmer Cari huruf “m” entah satu sampe tiga bertempelan.
/m{1,}/ Saya adalah programmer Cari huruf “m” entah satu sampe berapa aja bertempelan.

Kasta III: Kelas Template

Misalnya, saya ingin mencari angka atau digit dalam setumpuk string. Bisa sih pakai /[0-9]/, tapi ternyata ada templatenya. Template ini mungkin juga bakal berlaku untuk angka-angka bahasa lain seperti bahasa Arab, dst…

Biasanya kelas template ini diwakili oleh satu huruf, dan hurufnya huruf kecil. Kalau hurufnya besar itu justru kebalikannya.

Sintaks Contoh Kasus Fungsi
\d /\d/ Harga Rp100 Karakter angka/digit
\D /\D/ Harga Rp100 Selain karakter angka/digit
\s /\s/ Harga Rp100 Karakter spasi, termasuk tab dan garis baru.
\S /\S/ Harga Rp100 Selain karakter spasi.
\w /\w/ Kata, spasi tidak termasuk.
\W /\W/ Selain kata, berarti spasi dan hanya kumpulan simbol termasuk.

Untuk sementara tiga kasta dulu aja, udah cukup harusnya.

Ada lagi kasta untuk cari kondisi mirip IF. Disebutnya “Look” entah “Look ahead” atau “Look behind”.

Misalnya, cocok dengan syarat sebelumnya ada huruf tertentu. Tapi cek dulu soalnya ada bahasa pemrograman yang nggak support seluruh.

Udah, fokus aja yang sekarang ini. Harusnya cukup ya. Soalnya yang agak menantang itu kombinasiin sintaksnya.

Contoh:

/Samsung S\d+/

Itu artinya bakal cocok dengan Samsung S apapun dengan angka minimal satu setelahnya. Bisa Samsung S4, Samsung S20, Samsung S3120, Samsung S999999, semuanya cocok.

Kemudian,

/a.*stoon\..{3,6}/

Nah yang ini agak rumit. Kita pecah satu-satu.

  • a.*stoon artinya dimulai dengan “a”, terus apa pun nggak ada juga nggak apa, diakhiri dengan “stoon”. Berarti, astoon, anandastoon, axyzstoon, cocok semuanya.
  • \. artinya cocok dengan karakter titik. Lho kok pake backslash? Soalnya kalau titik doang udah kepake di sintaks regex hehe, makanya kita escape pake “\”. Kecuali di dalam kurung kotak ya, gak perlu escape.
  • .{3,6} artinya cocok dengan karakter apapun mulai dari 3 atau 6 bertempelan. Berarti com, org, biz, live, cocok semua. Kalau tv atau download tidak cocok karena kurang atau lebih dari 3 dan 6.

Kesimpulannya,

/a.*stoon\..{3,6}/

Cocok dengan:

  • anandastoon.com
  • astoon.live
  • avwxyzstoon.net

Tapi nggak cocok dengan:

  • anandastoon.tv
  • atoon.com
  • astoon?net

Getchu! Nah, main-main aja sama interaktif di bawah.

Keserakahan

Wah serakah apa nih? Apakah regex rakus atau haus kekuasaan?

Enggak! Ini bukan politik.

Keserakahan atau greedy, adalah cara regex meraup hasilnya. Tapi keserakahan itu bisa di-stop dengan “?” setelah sintaks rakusnya.

Apa ciri-ciri sintaks rakus? Yakni seluruh sintaks yang mengandung perintah “sampe berapa aja deh”.

Berarti sintaks rakus itu adalah:

  1. “*”, yang artinya sampe berapa aja, nggak ada nggak apa.
  2. “+”, yang artinya sampe berapa aja, tapi minimal satu.
  3. “{1,}”, yang artinya entah mulai dari satu, sampe berapa aja (tidak ada argumen akhir).

Jika kita beri “?” tepat setelah sintaks rakus tersebut, maka itu dapat menyetop keserakahan regex.

Contoh, ada kasus begini:

Malam dalam kalam menyatu di alam.

Saat kalian ingin memilih kata yang berawalan “a” dan berakhiran “m”, jadilah kalian memberikan sintaks regex:

/a.+m/

Harapan kalian adalah mendapatkan 4 kecocokan di kata “Malam“, “dalam“, “kalam“, dan “alam“.

Tapi karena regex defaultnya serakah, yang terjadi adalah kalian hanya mendapatkan 1 kecocokan saja, yakni “Malam dalam kalam menyatu di alam.”

Coba deh kasih tanda tanya.

/a.+?m/

Pasti jadi sesuai harapan kecocokannya karena cukup berhenti setelah dapat satu syarat setelah “?” saja.

Tantangan

Nah, setelah ini, coba kalian buat sendiri bagaimana sintaks regex untuk validasi alamat email.

Misalnya yang begini cocok:

  • anandastoon@gmail.com
  • astoon.123@ymail.net
  • anistoon_8V@hotmail.com

Tapi yang begini gak boleh cocok:

  • anandastoon@
  • astoon.123.ymail.net
  • anistoon_8V@hotmail

Oh, satu lagi, alamat email tidak boleh diawali dengan simbol, kalau digit boleh.

Silakan mencoba ~

Sebelumnya
Trigonometri & Pemrograman, Persahabatan yang Klop

Berikutnya
Membuat Labirin dengan Algo Prim dan Backtracker

1 Jejak Manis yang Ditinggalkan

  1. Wah, keren amat bang! Itu interaktifnya bikin sendiri kah?

    Banyakin bang contoh-contohnya! Sukses selalu!

Minta Komentarnya Dong...

Silakan tulis komentar kalian di sini, yang ada bintangnya wajib diisi ya...
Dan jangan khawatir, email kalian tetap dirahasiakan. 😉

Kembali
Ke Atas