TechTalk #70 : REAL PROGRAMMER USE REGEX

16
Bermain dengan Regex (REGULAR EXPRESSION)

Transcript of TechTalk #70 : REAL PROGRAMMER USE REGEX

Page 1: TechTalk #70 : REAL PROGRAMMER USE REGEX

Bermain dengan Regex(REGULAR EXPRESSION)

Page 2: TechTalk #70 : REAL PROGRAMMER USE REGEX

Studi KasusMengambil artikel dari paper dan kemudian menampilkan nya di halaman web, tetapi semua link image yang ditemukan dalam paper ditampilkan gambarnya dan semua link youtube di tampilkan videonya.

Tanpa Regex….??????????

Page 3: TechTalk #70 : REAL PROGRAMMER USE REGEX

Regular Expressions 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.

Page 4: TechTalk #70 : REAL PROGRAMMER USE REGEX

Wildcard Anda yang pernah memakai DOS atau Linux tentunya familiar dengan wildcard—atau globbing jika di Unix. Wildcard adalah sebuah string pola yang dapat digunakan untuk dicocokkan dengan sekumpulan nama file dan direktori. Misalnya: *.exe akan cocok dengan semua file berekstensi .exe. Karakter khusus wildcard ‘*’ di sini berarti cocok dengan deretan satu atau lebih karakter apa saja. Contoh lain, ???.txt akan cocok dengan tiap file .txt yang namanya terdiri dari tiga huruf.

Page 5: TechTalk #70 : REAL PROGRAMMER USE REGEX

Pemilihan, Pengelompokan, Set, dan Opsional (1)

Sama seperti wildcard, regex pun adalah sebuah string pola. Pola yang akan dicocokkan oleh komputer dari kiri ke kanan. Pola regex “satu” misalnya, cocok dengan string “satu” dan tidak dengan string “dua”. Tidak ada bedanya dengan operasi pembandingan string biasa bukan?

Beberapa karakter dalam sebuah pola regex akan diartikan secara khusus. Karakter-karakter ini disebut karakter meta (alias, bukan yang sesungguhnya). Ini sama seperti karakter * dan ? di wildcard yang bukan diartikan sebagai karakter literal bintang dan tanda tanya itu sendiri, melainkan berarti khusus. Demikian juga karakter-karakter meta.

Page 6: TechTalk #70 : REAL PROGRAMMER USE REGEX

Pemilihan, Pengelompokan, Set, dan Opsional (2)

Jika wildcard di DOS hanya mengenal dua karakter meta, ? dan *, dan itu pun tidak fleksibel, maka dalam bahasa regex standar umumnya dikenal beberapa jenis karakter meta lain. Berikut ini beberapa karakter meta dasar.◦ | (garis vertikal) untuk pemilihan;◦ ( dan ) (kurung buka dan kurung tutup) untuk pengelompokan;◦ [ dan ] (kurung siku buka dan tutup) untuk membuat set karakter;◦ ? (tanda tanya) untuk mengartikan opsional.

Page 7: TechTalk #70 : REAL PROGRAMMER USE REGEX

Pemilihan | disebut juga alternasi atau pemilihan. Dapat dibaca sebagai “atau”. Gunanya untuk memilih satu dari dua atau lebih alternatif yang kita sediakan. Beberapa contoh:◦ aku|kamu, cocok dengan aku atau kamu, tapi tidak dengan dia;◦ apel|anggur|pisang, cocok dengan salah satu dari apel, anggur, atau pisang,

tapi tidak dengan jambu karena itu tidak ada dalam daftar pilihan.

Page 8: TechTalk #70 : REAL PROGRAMMER USE REGEX

Pengelompokan ( dan ) berguna untuk mengelompokkan, persis seperti tanda kurung dalam operasi matematika. Umumnya dipakai bersama karakter meta lain.

Contoh: satria (baja hitam|pembela kebenaran) akan cocok dengan “satria baja hitam” atau “satria pembela kebenaran”. Regex ini berbunyi sebagai berikut: “deretan huruf ‘satria’ diikuti spasi dan diikuti ‘baja hitam’ atau ‘pembela kebenaran’.

Page 9: TechTalk #70 : REAL PROGRAMMER USE REGEX

Set karakter [ dan ] mengapit sebuah set karakter. Pada dasarnya berguna untuk memberi pilihan juga, sama seperti |, namun memiliki perbedaan pilihannya berupa huruf dan memiliki sintaks rentang dan negasi. Sintaks rentang adalah [m-n] dan akan cocok dengan karakter mulai dari m hingga n. Sintaks negasi adalah [^m] dan akan cocok dengan semua karakter kecuali m. ◦ bat[aoiu]k, cocok dengan batak, batok, batik, atau batuk.◦ bat(a|i|o|u)k, sama dengan sebelumnya, namun menggunakan |.◦ [0-9], cocok dengan angka 0 hingga 9.◦ [A-EG-Z], cocok dengan semua huruf besar kecuali F.◦ [0-9][0-9], cocok dengan `00’ hingga ‘99’ (100 kombinasi).

Page 10: TechTalk #70 : REAL PROGRAMMER USE REGEX

Opsional Arti ? di regex berbeda dengan di wildcard. Di regex, ? berarti huruf atau kelompok di kiri bersifat opsional. Dapat juga dibaca sebagai “boleh ada atau boleh tidak.” Beberapa contoh:◦ silah?kan, cocok dengan silakan atau silahkan.◦ (silah)?kan, cocok dengan silahkan atau dengan kan saja.◦ advi([sc]es?|sory), cocok dengan advice, advise, advices, advises, atau advisory. Regex ini

berbunyi “empat huruf advi diikuti dengan salah satu dari: a) huruf s atau c yang diikuti e dan boleh diikuti s; atau b) deretan huruf sory.”

Page 11: TechTalk #70 : REAL PROGRAMMER USE REGEX

Titik, Nol-Atau-Lebih, Satu-Atau-Lebih, Jangkar

Berikut ini empat lagi karakter meta dasar lain.◦ . (titik) cocok dengan satu karakter apa pun;◦ * (bintang) untuk mengartikan “nol atau lebih”;◦ + (plus) untuk mengartikan “satu atau lebih”;◦ ^ (tanda pangkat) dan $ (dolar) untuk penjangkaran.

Page 12: TechTalk #70 : REAL PROGRAMMER USE REGEX

Titik Titik atau dot adalah lambang yang cocok dengan semua karakter tunggal. Beberapa contoh:◦ bat.k cocok dengan batak, batok, dan juga batbk, bat+k, bat8k, dsb. Namun

tidak cocok dengan batrak (karena tr adalah dua karakter) atau batk (nol karakter).

◦ bat.?k sama seperti sebelumnya, namun cocok pula dengan batk (nol karakter) karena titik diikuti oleh tanda opsional.

◦ b...k cocok dengan lebih banyak lagi string, mulai dari batak, buruk, bilik, dan semua potongan string yang terdiri dari 5 karakter, diawali dengan b dan diakhiri dengan k.

Page 13: TechTalk #70 : REAL PROGRAMMER USE REGEX

Nol-Atau-Lebih, Satu-Atau-Lebih

Kalau tanda optional ? bisa dibilang sebagai “nol-atau-satu”, maka * melambangkan “nol-atau-lebih” dan + melambangkan “satu-atau-lebih” dari karakter atau kelompok yang berada tepat di kiri tanda tersebut. Beberapa contoh:◦ [0-9]+, cocok dengan deretan angka.◦ .+, cocok dengan satu atau lebih karakter apa pun, atau cocok dengan string yang “tidak

kosong”.◦ .*, cocok dengan nol atau lebih karakter apa pun, atau cocok dengan string apa saja,

termasuk juga yang kosong.◦ h?(ah|eh)+!*, berbunyi “boleh diawali huruf h, terdiri dari deretan ah atau eh, dan boleh

diakhiri dengan deretan tanda seru.” Cocok dengan string seperti eh, hahahah!, atau ehehahehah!!!. Tidak cocok dengan string seperti haha, hhah!, maupun h!.

Page 14: TechTalk #70 : REAL PROGRAMMER USE REGEX

Jangkar ^ dan $ masing-masing dapat disebut sebagai “harus di awal” dan “harus di akhir.” Mengapa disebut jangkar? Kedua karakter ini tidak melambangkan karakter mereka sendiri, ingat, keduanya adalah karakter meta. Bahkan ^ dan $ di sini tidak melambangkan karakter apapun, melainkan mensyaratkan posisi atau penambatan pola ke string yang ingin dicocokkan. Itulah sebabnya pasangan karakter meta ini disebut anchor, atau jangkar. Beberapa contoh:◦ 456 cocok dengan 456, 456789, maupun 123456 karena ketiganya

mengandung pola tersebut.◦ ^456 cocok dengan 456, 456789, namun tidak cocok dengan 123456.◦ ^456$ hanya cocok dengan 456, tidak dengan 456789 maupun 123456.

Page 15: TechTalk #70 : REAL PROGRAMMER USE REGEX

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.

Page 16: TechTalk #70 : REAL PROGRAMMER USE REGEX

Escape Karakter \ (backslash, garis miring terbalik) boleh disebut karakter meta juga, meski orang biasa menyebutnya karakter pengescape. Garis miring terbalik ini perlu sekali untuk dua hal.

Fungsinya, untuk menjadikan karakter meta tepat di belakangnya menjadi literal. Katakanlah Anda ingin mencocokkan x^2. Bagaimana caranya, sementara ^ adalah karakter meta? Jawabnya dengan escape: x\^2.