Jumat, 22 Maret 2013

Mengenal Regular Expression (RegEx)

Regular Expression atau yang lebih sering disebut regex merupakan sebuah teknik yang digunakan untuk mencocokan string teks, seperti karakter tertentu, kata-kata, atau pola karakter. RegEx memiliki 2 fungsi utama yakni mencari dan mengganti, mencari suatu pola tertentu dalam text lalu menggantinya menjadi pola yang lain.



Regular Expression digunakan oleh banyak teks editor, utilities, dan bahasa pemrograman untuk pencarian dan memanipulasi teks berdasarkan pola. Misalnya, Perl, Ruby dan Tcl memiliki engine Regular Expression yang kuat dibangun pada syntax mereka.

Sejarah RegEx

Tahun 1950an, Stephen Cole Kleene seorang ahli matematika membuat sebuah model pattern string menggunakan notasi matematika, yang disebut regular sets. Ken Thompson mengimplementasikan notasi tersebut ke dalam text editor buatannya, QED, untuk pencarian string dengan pola tertentu. Dia jg menambahkan fitur tersebut ke dalam ed, sebuah editor text dalam sistem operasi unix. untuk pencarian string dalam ed menggunakan pattern, perintahnya: /g /re /p (/g : globally, /re : regular expression, /p : print) yang maksudnya adalah pencarian global baris2 dalam sebuah file yang memiliki pola tertentu, dan ditampilkan/cetak/print. Istilah Grep akhirnya digunakan sebagai nama sebuah program atau tool dalam sistem operasi unix untuk fungsi yang sama yakni pencarian string.

Prinsip Kerja RegEx

Engine RegEx terdiri dari 2 jenis Text-directed engine dan regex-directed engine atau ada juga yang mengatakan DFA (Deterministic Finite Automaton) dan NFA (Nondeterministic Finite Automaton) engines. Namun jenis mesin engine yang lebih banyak diminati adalah regex-directed engine, disamping itu featurenya lebih hebat dari text-directed engine.
Misalnya saja kita mencocokan kata “regex” dengan kata “belajar regex sekarang”, pertama-tama regex akan memulai mencocokan karakter pertama yaitu huruf “R” dengan “B”, karena tidak cocok maka akan dilanjutkan ke tempat selanjutny yaitu “R” dengan “E”, karena masih belum cocok juga proses ini akan terus berlanjut, hingga akhirnya menemukan hurup “R” yaitu di posisi ke-7, hasil ini akan disimpan di memori bahwa telah valid pada posisi ke-7, kemudian akan meneruskan langkah selanjutnya mencocokan hurup “E” dengan ” ” dan ternyata tidak cocok, engine akan mulai melakukan pencocokan kembali. Karena huruf “E” tidak ditemukan maka kali ini engine akan kembali menggunakan huruf “R” dan dicocokan pada posisi ke-9 yakni huruf “R”. Karena valid, engine menggunakan huruf berikutnya yakni huruf “E” dan dicocokan dengan posisi ke-10 yakni huruf=”E”. Proses ini akan terus diulang hingga mencapai posisi akhir suatu himpunan string. Nah jika kata “regex” ditemukan oleh kata “belajar regex sekarang” maka engine akan melaporkan bahwa Regular Expression telah valid, meskipun masih ada karakter yang belum di validasi (kata “sekarang”). Itu adalah cara kerja NFA yang lama, berbeda dengan mesin NFA yang sekarang, sudah lebih baik, yaitu meskipun string yang dicari telah match tetap akan diteruskan sampai benar-benar valid ditemukan. Setelah itu baru dibuat laporan sukses.
Berbeda dengan engine dari NFA, engine DFA memilik cara kerya yakni membandingkan semua karakter secara serempak, hal ini membuat total memory yang dibutuhkan lebih besar dari NFA, sehingga teknologi NFA lebih diminati.
Beberapa sistem yang telah menggunakan teknologi NFA ini diantaranya adalah Perl, Java, .NET languages, PHP, Python, Ruby dan masih banyak lagi.

Belajar Regex memang susah diawal, tapi kalo sudah bisa akan sangat menyenangkan dan membantu pekerjaan kita sehari-hari. Tidak hanya programmer saja perlu mengenal Regex, orang awam juga perlu karena manfaatnya bakalan besar sekali misalnya mencari file .doc, .pdf atau yang lainnya pada sistem operasi windows.

Dasar Teori Regex

salah satu fungsi yang dapat digunakan untuk operasi regex adalah:

ereg(string_pola, string_sumber);

fungsi ini akan menghasilkan TRUE, jika ternyata pola cocok dengan sumber dan FALSE jika keduanya tidak cocok.
pola dari fungsi di atas adalah rumus dari data text yang diinginkan. Cara membuat rumus canggih ini dengan menggunakan karakter meta. singkatnya meta itu adalah karakter yang memiliki arti tertentu. contoh pada perintah DOS adalah DIR *.*, karakter * tidak diartikan sebagai karakter bintang oleh komputer melainkan mempunyai arti khusus.
ada beberapa karakater meta yang perlu di ketahui, yaitu :

• Karakter meta | (Garis Vertikal)

Karakter | artiknya menjadikan karakter meta text sebagai pilihan pada pola untuk di cocokan dengan sumber. Contoh: ereg(Uus | Lukman |Nanang, Lukman) Artinya akan TRUE karena Lukman adalah salah satu pilihan dari pola. namun jika sumbernya ternyata adalah Hasan, hasilnya akan FALSE alias tidak cocok, karena hasan tidak ada pada salah satu pilihan tersebut. ( dan ), karakter kurung buka dan kurung tutup karakter kurung buka dan kurung tutup berguna untuk mengelompokan beberapa kata atau data text agar dianggap menjadi suatu kesatuan. Contoh: ureg((Uus Musailini)|(Lukmanul Hakim)|Nanang, Lukmanul); Hasil penyataan regex di atas adalah FALSE alias tidak cocok , karena Lukmanul Hakim adalah satu kesatuan, sehingga tidak sama Lukmanul saja.

• Karakter [dan] kurung siku buka dan tutup.

pada prinsipnya tanda kurung siku buka dan tutup sama dengan karakter | yaitu memberikan pilihan. namun pada karakter kurung siku mempunyai sintak rentang [awal-akhir] dan negasi [^teks]. ingat tanda ^ hanya berarti narasi jika di gunakan di awal karakter yang ada dalam kurung siku, sedangkan jika ada di luar kurung siku akan berarti“di awal”, misalkan untuk pemilihan angka dari 10 sampai 16 adalah: [10-16], sedangkan untuk pemilahan angka selain angka 17 adalah :[^17] klo belum jelas perhatikan contoh berikut ini :

1. Jika pola:[LBSTD]ayang, akan cocok dengan sumber : Layang, Bayang, Sayang, Tayang dan Dayang, selain itu
hasilnya akan FALSE atau tidak cocok.
2. Jika pola[^R]agu akan cocok dengan kata agu yang akan diawali oleh huruf apapun kecuali huruf R, yaitu Ragu
3. pola: [^0-9] akan cocok dengan karakter apapun kecuali angka.
4. jika pola: ber[2-4]an, akan cocok dengan sumber, ber2an, ber3an dan ber4an. Selain itu FALSE
Karakter ? (Tanda tanya )

Fungsinya untuk menyatakan bahwa sebuah karakter di sebelah kirinya boleh ada atau tidak ada, Contohnya;
1. Jika pola: yac?h maka akan cocok yach atau yah
2. Jika pola: bu(ai)?kan maka akan cocok dengan buaikan dan bukan
3. jika pola: [tb](i|u)(ku)? bisa, ti, tu, bi, bu, tiku, tuku, biku dan buku
Karakter jangkar (^ dan $)
karakter ini berfungsi untuk menyatakan posisi dari dari pola, yaitu karakter ^ untuk menyatakan di awal sedangkan karakter $ untuk posisi terakhir, Contoh:
1. Jika pola: ^ uus tidak akan cocok dengan karakter mas uus , kak uus, tetapi kalo uus ku baru cocok
2. jika pola: uus$ maka akan cocok dengan mas uus, kak uus tetapi tidak cocok dengan uus ku
3. dan jika pola: ^lukman$ maka akan hanya cocok dengan lukman doank.

Karakter titik (.)
Karakter ini berfungsi untuk mewakili sebuah karakter tunggal apapun, Contoh:

1. jika sebuah pola seperti ..S, hanya akan cocok dengan sumber yang berupa kata yang terdiri dari tiga huruf dan berakhir
dengan huruf S, contoh IIS, iiS, uuS, UUS, IUS, AIS dan sebagainya.

Karakter + (tambah)
meta + mewakili setidaknya satu dari sekelompok karakter dari kiri tanda + tersebut, Contoh
1. pola: (na|ni)+ akan mewakili atau cocok dengan sumber berupa na, ni, nanana, nini, setidaknya ada satu karakter dari
sebelah kiri karakter + .
2. Pola: [0-9]+ akan cocok dengan sumber angka berapapun.
3. pola: [a-z][A-Z]+ akan cocok dengan huruf apapun, baik huruf kapital ataupun huruf kecil.

Karakter * (bintang)
Fungsinya sama dengan tanda +, bedanya pada tanda asterik ini karakter di sebelah kiri boleh ada atau tidak. contoh:
1. (AWAS)!* akan cocok dengan AWAS!, AWAS, AWAS!!!! dan lain-lain.

Karakter { dan } (tutup dan buka kurawal)
Fungsi untuk menangani pengulangan karakter di sebelah kiri tanda, b{3} akan cocok dengan bbb, ^A[2] akan cocok dengan karakter apapun yang di awali denganAA, misalnya: AA, AAng, AAn dan lain-lain, pola r{3}$ akan cocok dengan sumber berupa kata apapun yang berakhiran rrr, misalkan gerrr, byurrr, dooorrr dan lain-lain.
Selain karakter meta di atas PHP juga menyediakan class karakter yang fungsinya sama dengan meta, beberapa class di php tersebut yaitu, [[:alpa]] akan berarti sembarang huruf, [[:digit]] akan mengwakilik angka, [[[:alnum]] akan berarti angka atau digit, [[:space]] akan berarti sembarang space, [[:upper]] akan berarti sembarang huruf kapital dan [[:lower]] akan berarti sembarang huruf kecil.

Referensi:
http://ketikan10jari.wordpress.com/scripting-dan-bahasa-pemograman/scripting-php/dasar-teori-regex/
http://www.indoclass.com
http://tutorial.dumbstrack.org/mengenal-regular-expression-regex/

2 komentar:

  1. terima kasih mba sudah mau share tentang materi Regular Expression ini, saya sedang mencari - cari ilmu tentang ini di internet dan baru sekarang nemunya di blog ini.

    BalasHapus