Kegunaan Regular Expression (Regex)

HW> All, sorry… boleh dong di jelasin kegunaan Regexp ini secara
HW> aplikatif ? Klo di modul-2 bisnis di pakai untuk apa ya..

Versi lengkapnya bisa lihat di Wikipedia. Tapi secara singkat, regex hanya suatu cara untuk mengolah teks, fungsi dasarnya untuk search dan replace teks. Jadi kalo di Delphi pernah menggunakan Pos, Copy, Delete, Concat, dkk, cara lebih efektif untuk itu bisa dengan regex.

Yang pernah saya pakai sih macam-macam, misalnya import dari file teks, web, validasi input, merapikan input ke database, memformat output, dst. Biasanya regex ini temen dari bahasa-bahasa scripting, seperti PHP, JScript, Perl, dkk. Bukan buat gaya-gayaan, tapi memang bikin gampang. Lha Pascal saja kalo dikasih ke nenek-nenek yang tidak bisa memrogram, dia pasti teriak: apaan tuh???

Ini agak menyimpang, tapi bagus juga buat contoh. Misalnya memotong teks yang berisi tag HTML (misalnya hasil pencarian di web). Kalo tidak benar bisa berakibat tampilan rusak, seperti bold dan italic melebar. Saya pernah buat dengan PHP, tapi berapa banyak kalo di Perl?

$str = "Ini Dia</tag><tag x=201></i><i><b>ikan <u>ayam</b>telor</u> asin"; $tag{$2} += $1 ? ($tag{$2} ? –1 : 0) : 1 while $str =~ m/<(\/?)(\w+)[^>]*>/g; $tutup_tag .= "</$_>" x $tag{$_} for (keys %tag); print $str. $tutup_tag;

Hanya 2 baris saja, mantab ya. Kalo Pascal berapa (puluh) baris?🙂 Tapi tenang saja, kalo anda biasa membuat program bisnis dan selama ini lancar tanpa regex, tak perlulah memakai regex. Sama saja kalo selama ini membuat program bisnis tanpa memakai Delphi, tak perlulah memaksa memakai Delphi. Gitu saja koq repot.

ICS> code explorer menyediakan 2 kolom pengaturan, yaitu: – Skip Lines
ICS> matching this multiline regular expression – Skip strings

Regex hanya berfungsi untuk search / replace saja, tidak bisa mengingat banyaknya kata. Kalo di Perl ini pake hashes, di PHP dengan associative arrays, di Delphi dengan TStringList. Implementasi regex juga berbeda-beda, jadi suatu pola belum tentu jalan di semua tempat.

Secara Perl, mencari kata yang muncul > 1 bisa seperti ini (untuk regexnya lihat di m/(regex)/).

open(FH, "File.txt") or die($!); while (<FH>) { $str = lc $_; $kata{$1}++ while ($str =~ m/\b(\w+)\b/g); } print $kata{$_} > 1 ? "$_\n" : "" for (keys %kata);

Implementasi regex yang paling lengkap dan banyak dipakai itu PCRE (tentu ada yang lain, seperti yang rekan lain contohkan). Untuk Delphi sendiri sudah ada wrapper-nya, dibuat oleh Jan Goyvaerts. Saya lihat cukup rapi dan bermanfaat. Hanya menambah 52KB ke program (tanpa DLL). Jadi tidak ada alasan menolak regex bila banyak bermain dengan string, karena harganya murah.

Untuk hashes di Delphi, saya sudah cek beberapa TStringList dari torry, meskipun klaimnya faster tapi kesimpulannya sama: katro. Gunakan saja TStringList dari Delphi. FreePascal jg terinspirasi dari Delphi (lebih tepatnya mencontek) meski lebih lambat (sedikit).

Ada ulasan dari Marco Cantu tentang "Optimizing Delphi Lists and Strings", tapi hasil diskusi kita ternyata lebih baik, yaitu meng-override fungsi-fungsi ansi* dkk. Mungkin kalo beliau mencoba di Perl reaksinya akan sama seperti nenek-nenek kemaren: apaan tuh???

Btw, status fungsi-fungsi ansi* itu sendiri saya pikir ambigu, UTF-8 bukan, MBCS juga apa iya? Ansistring di Delphi adalah 1 byte, tidak pernah jalan-jalan jadi 2 dan 4 byte. Bila sekedar CompareStr agar urut secara locale, harganya relatif mahal. Mungkin rekan-rekan kita dari Jawa yang masih menggunakan bahasa Sansekerta bisa cerita. Tapi apa masih ada ya?

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s