Regular Expression Mia Kamayani ST, MT ProdiTeknikInformatika FakultasTeknik UHAMKA
REGULAR EXPRESSION • RE adalahbahasauntukmendeskripsikandanmemarsing string atauteks • RE merupakannotasi (pattern notation) yang dapatdigunakanuntukmengolahteks • RE seringdigunakanuntuk “search and replace”
Regular Expression • Regular Expression seringdisebutRegexatau RE • RE akanbersifat “match in”, misal RE “a” akan match in “cat” • RE ditemukanpadatahun 1940 an awaloleh 2 neuro physiologist, Warren McCulloch dan Walter Pitts padasaatmembuat model neuron (syaraf) • Kemudian model tersebutdibuataljabarnyaolehseorangmatematikawan Stephen Kleenedandiberinama “regular expression” • Tahun 1968 munculbuku “Regular Expression Search Algorithm” dari IBM
Tool RE • Adadigrep, QED, AWK, Emacs, Vi • Salahsatu tool yang dapatdigunakanuntukbelajar RE adalahhttp://weitz.de/files/regex-coach.exe (Regex Coach) yang dibuatoleh Dr. Edmund Weitzuntuk Windows atauhttp://weitz.de/files/regex-coach.tgzuntuk Linux. • Notepad++, OpenOffice, RegexBuddy, PowerGREP • Regexstudio.com • Kodos.sourceforge.net
Analogi RE • RE dapatadianalogikandenganberbagaifungsipengolah string padabahasapemrograman yang belummendukung RE. Misalnyastrcmp(), length(), mid(), trim(), substr(), pos(), strstr() dll. • RE jugamiripdenganfungsi wildcard pada DOS/UNIX untukpengelolaan file. Misal: *.txt, a*.t?tataugrep/sed/awkdi Linux • Jikamenggunakan RE untukmencarikata “cat” maca “vacation” akanikutditemukan
Kelebihan RE • Sangatampuhuntukmengeloladanmencocokkan file teksatau string • Sangatringkas, karenasintaks RE sangat “sederhana” • RE cepat, karenamenghindarikitamelakukanpemeriksaan manual dan RE cepatdalammencocokkanpola-polanya.
Aturan RE • Leftmost-rightmost • Quantifier is greedy
BagianUtama RE • Meta character: karakter-karakter yang memilikiartikhususdi RE danmewakilisekelompokkarakter lain ataupolakhusustertentu • Yang temasuk: *, ., [, ], (, ), ^, $, + dll • Literal character: karakter-karakterbiasa (yang diterjemahkanapaadanya) yang tidakmemilikiartikhusus
Library RE • Setiap tool yang mengimplementasikan/menggunakan RE menggunakan library RE danmesin RE • Mesin RE adalah program yang menerima string pola RE danmengkompile-nyamenjadi RE tree yang berupamesin state. • Mesin RE akanberusahamencocokkansemuakemungkinandari RE untuk string yang dicocokkan. • Library RE yang terkenaladalah library PERL karenasangatcepatdan optimal
BahasaPemrogramanPendukung RE • Java, dengan • Import java.util.regex.* • Import org.apache.regexp.RE.* • PHP mendukung RE POSIX (misalnya: ereg()) dan RE PCRE (misalnyapreg_match()). • Python (gunakan re) • .NET (gunakanSystem.Text.RegularExpression) • Delphi, Pascal dan C belummendukung RE
Karakter Meta Dasar • Pemilihan (alternation) • Menggunakankarakter “|” yang menyimbolkanpemilihan • Sintaks: A1|A2|A3 dst • Dimana A1, A2, A3 adalah sub pola • Karakter “|” dibaca “atau” • Contohpola: • http|ftp|smftp, berartisalahsatu string http atau ftp atausmtpcocok. • Akancocokdengankalimat: http://www.uhamka.ac.idatauftp://ftp.students.uhamka.ac.id
Karakter Meta Dasar • Pengelompokkan (grouping) • Menggunakankarakter “(“ dan “)” • contoh: Mahasiswateknik (informatika|elektro|mesin) UHAMKA • Akancocokdengan “Mahasiswateknikinformatika UHAMKA” atau“Mahasiswateknikelektro UHAMKA” atau “Mahasiswateknikmesin UHAMKA”
Karakter Meta Dasar • Karakterapasaja (any character) • Menggunakankarakter “.” • Contoh: Anton… berartikalimat Antonius akancocok, tapitidakakancocokdengan Anton, Antony. Karenatandatitiknyaada 3 buah, makaberartikata Anton harusdiikutidengan 3 karakterapasaja
Karakter Meta Dasar • Karakterkelas (character class/character sets) • Kumpulan karakterdigunakantanda “[“ dan “]” yang digunakanmendefinisikansekumpulankarakter yang cocok • Miripdenganpemilihan, hanyasajakelaskarakterhanyaberlakuuntuk 1 karaktertunggal • Di dalamkarakterkelas, dikenalkarakter range(-) dankarakternegasi (^)
KarakterKelas • Contoh:
Perhatian • Karakter-karakterseperti |, ., () yang merupakankarakter meta akanmenjadikarakter literal jikaadadidalamkarakterkelas. Contoh: [(a|b)] akanmenjadipolakarakter (a|b) bukankaraktersalahsatudari a atau b. Titikdidalamkelaskarakterakanmenjadikaraktertitiksebagaimanamestinyabukanmenjadikarakterapasaja. • Karakter – dan ^ akanmenjadikarakter meta dikelaskarakter. Tanda – berarti range dan ^ berartinegasi • Tanda – jikaberadadikelaskarakterbagianakhirakanmenjadikarakter literal. Contoh: [0-9-] berartikarakter 0 sampai 9 ataukarakter -
Karakter Meta Dasar • Karakterjangkar/anchor • Tanda ^ berartiawalbaris/string • Tanda $ berartiakhir string • Akhir/awalbaris/string bergantungpada modifier atau mode operasinya • Karakter ^ dan $ tidakmewakilisuatukarakterapapuntapimewakiliposisi • Contoh: ^hariakancocokdengan “hariminggu”, “harimau” • Contoh: hari$ akancocokdengan “matahari” • ^$ berartibaris/string kosong
Karakter Meta Dasar • Quantifier • Menggunakankarakter {} • Sintaks: P{m,n} atau P{m,} atau P{m} dimana P adalahpolasuaturegexdan m dan n adalah integer bilangan yang merupakanpembatasjumlahkeluaranpola • Contoh: [0-9]{3} berartikarakter 0-9 sebanyaktepat 3 kali muncul • [a-z]{2,3} berartikarakterantara a-z minimal 2 maksimal 3 kali muncul
Karakter Meta Dasar • Optional (0 atau 1) • Menggunakankarakter ? Samaartinyadengan {0,1} • Contoh: colou?rcocokdengan color ataucolour • (July?) (fourth|4(th)?) cocokdengan July fourth, Jul fourth, July 4, July 4th, Jul 4, Jul 4th
Karakter Meta Dasar • 0 ataulebih • Menggunakankarakter * samadengan {0,} • Arti * padaregexberbedadengan * pada wildcard • Arti .* padaregexartinya 0 ataulebihkarakterapasaja • 1 ataulebih • Menggunakantanda + samadengan {1,}
Karakter Meta Dasar • Kelaskarakter digit (angka) • Sintaks: • \d samaartinyadengan [0-9] • \D samaartinyadengan [^0-9] • Kelaskarakterhuruf (alphanumerik) • Sintaks: • \w samaartinyadengan [0-9A-Za-z_] • \W samaartinyadengan [^0-9A-Za-z_]
Regular Expression • Karakter whitespace • Sintaks: • \s termasukspasi, tabulasidan newline • \S artinya non whitespace • Word boundary (batasantarkata) • \b artinyaposisibatasantarkata • Awaldanakhir string merupakanbatasantarkata • Contoh: • ^saya\b akancocokdenganbaris yang diawali “saya” tapitidakcocokdengan “sayang” atau “sayatan”
Karakter Meta Dasar • Awaldanakhirbaris/string • Selainmenggunakan ^ dan $ dapat pula menggunakan \A, \Z, \z • Karakter \A cocokdenganawal string • \Z cocokdenganakhir string atausebelumbarisselanjutnya • \z cocokdengankarakterterakhirdari string • Contoh: “kuku ku\nkakiku\nkaku\n” akancocokdengan \Akuku, \Akukuku, kaku\Z
Karakter Meta Dasar • Escape karakter meta • Untukmenanganikarakter meta sebagaikarakterbiasaharusdilakukan escape • Dengancaramemberikarakter \ • Contoh: [a-z]\^d+ yang akanmencocokkan string seperti a^3, b^2 dst
Karakter Meta Dasar • Escape Pola • Jikaterlalubanyak escape akanmembingungkandalammembacanya • Di beberapabahasapemrograman RE disediakan \Q … \E yang bergunamengapitsubpola yang dijadikan literal • Contoh: \Q…*\E akanmencari string …*
Match Group • Untukmengambil/mengingatsubpoladarikeseluruhanpola yang terpilihdigunakantandakurung () • Subpolaituakandiingatoleh RE dandapatdipanggilkembalidengankarakter meta \1, \2 dstuntuksetiapsubpola yang ditangkapsesuaiurutankemunculan
Non Greedy Matching • Sintaks: • *?, +?, ??, {n}?, {m,n}?, {n,}? • Untukmendapatkanpolasesedikitmungkin • Contoh: “mahasiswiinformatika UHAMKA” • Pola: maha(.+)I • Maka yang didapatadalah: “mahasiswiinformati” • Hal inikarena RE memilikisifat greedy yaitumengambilseluruhtekshinggahuruf I terakhir. Padahalmaksudkitaadalahmendapatkan string “mahasi”, pencocokansesedikitmungkin • Non greedy akanmampumelakukanitudenganmengubahpolamenjadi: maha(.+?)i
Non greedy matching • Non greedy hanyacocokuntukmencocokkanpoladibagiantengahsaja, bukanpadaakhir string • Contoh: komen(.*?) bermaksudmendapatkan string “komentar” tapi yang didapatadalah “komen”. Karena non greedy akanmencocokkan .*? Sebagai 0 ataulebihkarakterdan yang diambiladalah yang paling sedikityaitu 0 karakter • Sedangkanjikapolamenjadikomen(.+?), maka yang didapathanya “koment” karena .+ akanmencocokkan 1 ataulebihkarakter, dan yang diambilhanya 1 karaktersaja
Non Capturing Group • Sintaks: • (?:P), dimana P adalahsubpola • Contoh: • Pola: ((\(\d{3,4}\))-(\d+)) • String: (0274)-515278 • \0 menghasilkan(0274)-515278 • \1 menghasilkan (0274)-515278 • \2 menghasilkan (0274) • \3 menghasilkan 515278 • Jikamenggunakan non-capturing group polaakanmenjadipola: (?:(\(\d{3,4}\))-(\d+)) • \0 menghasilkan(0274)-515278 • \1 menghasilkan (0274) • \2 menghasilkan 515278
Positive Look • Positive Look Ahead • Sintaks: • (?=P) P adalahsubpola • Polainimencaripola yang diikutiolehpolatertentu • Contoh: • Awal: \w+\s*(\d), cocokdgn string anton 123 • Sekarang: \w+\s*(?=\d), cocokdgn string anton 123 • Positive Look Behind • Sintaks: • (?<=P) • Polainiakanmencaripolatertentu yang didahuluiolehpolatertentu • Contoh: • Awal: \d\s*[a-z]+, cocokdgn string 123 anton • Sekarang : (?<=\d)\s*[a-z]+, cocokdgn string 123 anton
Negative Look • Negative look ahead • Untukmencari string yang tidakdiikutiolehpolatertentu • Sintaks: (?!=P) • Contoh: \w+(?!=\s\d) • Mencarikata yang tidakdiikutiolehspasidanangka • Negative look behind • Untukmencari string yang tidakdidahuluiolehpolatertentu • Sintaks: (?<!P) • Contoh: (?<!\d\s)\w+ • Mencarikata yang tidakdidahuluiolehpolatertentu