Halaman

Senin, 10 Agustus 2015

Belajar Regex


apa itu regex?? regular expression.. sebuah pengolahan text yang sering dipakai pada beberapa bahasa pemrograman. tanpa menggunakan regex ini, refresh pattern di squid jadi panjang banget.. pokoknya regex mengenali pola-pola data dengan proses matching.. dalam sebuah url yang panjang dan bertele-tele ternyata ada kunci untuk menyimpulkan data apa yang sedang direquest.. atau sedang di download, kunci inilah yang dirumuskan dalam regex, seperti seorang kriptografer.. :P
ente yang pake windows atau linux base pasti tau apa itu wildcard atau globbing jika di Unix. Wildcard adalah sebuah string pola yang dapat digunakan untuk dicocokkan dengan sekumpulan nama file dan direktori. Mis: *.exe cocok dengan semua file berekstensi .exe. ???.3gp cocok dengan file .3gp. wildcard ini ternyata tidak sama polanya di windows, unix, dan linux.. nah.. regex mengambil jalan tengah..
seperti wildcard, Regex mengenali berdasarkan pola, yang dicocokan terhadap string dari kiri ke kanan,

tanda * dan ? disebuat karakter meta yang berarti alias.. (bukan sebenarnya red.)

String Meta
string meta itu terdiri dari | ( ) [ ] ? dimana

| adalah pemilihan (or)
( dan ) adalah pengelompokan
[ dan ] untuk character set
? yang berarti opsional


contoh:

elo|gue|end match dengan elo atau gue atau end selain itu nggak
(kakiku|tanganku)sakit match dengan kakiku sakit atau tanganku sakit
mikr[oi]ti(k|ng) match dengan mikrotik, mikritik, mikroting, mikriting
[A-Za-z] match dengan alphabet huruf kapital, dan huruf kecil, tapi tidak match dengan 1,2,3,4,5....!@##
[0-9] match dengan 1,2,3,4........0
0[0-9][1-9] match dengan 001 - 099, tidak match dengan 0, 00, 10-99, 000, 100, 101, dst

String opsional dan string meta lainnya
? artinya boleh ada, boleh tidak
. artinya match dengan 1 karakter, apapun itu
* artinya tidak ada sama sekali (nol) atau lebih karakter
+ artinya satu atau lebih karakter
^ batas depan, berarti didepannya gak boleh adalagi karakter dan tutupnya adalah $ yang berarti dibelakannya udah ga ada lagi karakter, biasa disebut jangkar
tetapi didalam [ ], $ bukan string meta..

contoh

(kom)?puter match dengan komputer atau puter
kontr?ol match dengan kontrol atau .... heheheheh
t.ket match dengan tiket, tzket, twket, t1ket, t*ket dan seterusnya
b.?la match dengan bola, bela, bila, atau bla
678 match dengan 12345678, 456789, pokoknya yang mengandung 678
^678 hanya match dengan 678, 6789, deretan 345678 tidak cocok
34$ match dengan 1234, 234, 34 345678 tidak cocok

string meta yang haus resource jika salah penggunaan
.+ match dengan apapun itu.. yang penting string
.* lebih parah lagi.. biarpun bukan string (ga ada karakter) diembat juga


Quantifier

?, +, dan * sebetulnya adalah shortcut dari sebuah sintaks yang lebih umum, yaitu quantifier. Quantifier menyatakan berapa rentang jumlah yang diperbolehkan dari elemen yang di depannya. Format quantifier adalah salah satu dari:

X{m}, artinya elemen X harus terulang sebanyak persis m kali.
X{m,}, artinya elemen X harus ada minimal sebanyak m kali.
X{,n}, artinya elemen X boleh ada hingga terulang maksimal n buah.
X{m,n}, artinya elemen X boleh ada dari m hingga n buah.

Beberapa contoh:
\d{5} cocok dengan bilangan 00000, 10000 hingga 99999 (semua harus terdiri dari digit sebanyak lima buah).
\d{1,5} cocok dengan bilangan 0-99999 (mulai dari satu hingga lima digit).
\d{1,} cocok dengan deretan digit, atau sama dengan pola \d+.
? sama dengan {0,1}, + sama dengan {1,} dan * sama dengan {0,}.

tambah jauh tambah ngeri ya??

untuk membuat sebuah karakter meta menjadi karakter yang berupa string (literal) kita perlu menambahkan "backslash".. ya.. "\"
contoh: [0-9]+(.[0-9]*) >> salah apa benar?? benar benar aja sih.. tapi jika maksudnya adalah
"Rangkaian satu atau lebih digit yang boleh diikuti oleh titik dan nol atau lebih digit lagi" yang maksudnya ntar hanya match dengan : 5, 0.3, 1012, dan 500.500. maka salah total..
kenapa?? karena mengandung karakter meta (.) yang berarti.. boleh 0z1, 0+0 :P

Tidak ada komentar:

Posting Komentar