350 likes | 786 Views
Regular Expression. Mia Kamayani ST, MT Prodi Teknik Informatika Fakultas Teknik UHAMKA. REGULAR EXPRESSION. RE adalah bahasa untuk mendeskripsikan dan memarsing string atau teks RE merupakan notasi (pattern notation) yang dapat digunakan untuk mengolah teks
E N D
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