Teknik Dasar untuk Menguasai Regular Expressions
Yasya El Hakim
Jika kalian belum tau apa itu Regex (Regular Expressions) serta cara untuk menggunakannya, maka disini kita akan membahasnya. Tutorial pada artikel ini merupakan konsep dasar atau pondasi dari Regular Expression serta hanya berfokus pada topik yang kompleks.
Tujuan dari Regex (Regular Expressions)
Regex atau Regular Expressions dapat digunakan untuk menemukan atau mencari pattern pada teks. Ya, itu saja. Pattern atau pola yang dicari dapat berupa teks. Berikut adalah contohnya:
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Disini, dengan menggunakan Regex, kita akan mencari teks "industry":
industry
Terlihat mudah bukan?
Pattern juga dapat menyeleksi atau memilih semua kata yang terdiri dari huruf "u". Regular Expressionnya akan seperti berikut:
\w*u\w*
Catatan: Kalian dapat mencoba semua pattern dari regex menggunakan beberapa tool online. Semua screenshot dari contoh regex saya ambil dari Regex101.
Kalian dapat melihat bahwa penyamaan teks nya akan menjadi lebih kompleks, tapi apa kalian tahu bahwa penggunaan Regular Expression dapat menjadi lebih kompleks lagi? Disini, terdapat notasi ekstra untuk menentukan set karakter dan menyamakannya pada pattern.
Ketika kita sudah menemukan pattern pada teks, lalu apa yang ingin kita lakukan? Pada Regex modern, kita dapat mengekstrak substring, menghapusnya, atau menggantikannya dengan teks lain. Regular Expression dapat kita gunakan untuk memparse dan memanipulasi teks.
Mungkin kita ingin mengekstrak sesuatu seperti IP Address, nama dan alamat email, dll. Ketahuilah, Regex adalah tool yang tepat dan mudah untuk dipelajari, tetapi sulit untuk dikuasai.
Menggunakan Square Bracket "[]" pada Regex
Cara termudah untuk memahami Regular Expression adalah dengan cara mencari kecocokan teks karakter yang ada diantara pattern dan string target. Berikut adalah contohnya:Patten:
lauk
String:
Aku memakan lauk ditengah laut
Tetapi, disini kita juga dapat menentukan teks alternatif dengan menggunakan karakter square bracket "[]". Berikut adalah contohnya:
Pattern:
lau[kt]
String:
Aku memakan lauk ditengah laut
Square Bracket buka "[" dan tutup "]" dapat memberitahukan Regex Engine untuk menyamakan teks yang ditentukan. Tetapi hanya satu. Contoh Regex diatas tidak akan bekerja sesuai dengan keinginan kalian jika pengaturannya seperti berikut:
Pattern:
lau[kt]
String:
Aku memakan lauk ditengah lautan.
Ketika kalian menggunakan Square Bracket "[]", artinya kalian sedang memberitahukan Regex Engine untuk menyamakan tepat salah satu dari karakter yang ada di dalam square bracket. Jika Regex Engine menemukan karakter l, lalu karakter a dan u, tetapi karakter selanjutnya bukan k dan t, maka hal tersebut tidaklah sama. Jika Regex Engine menemukan karakter lau kemudian karakter k atau t, maka pencariannya akan berhenti. Regex Engine tidak akan melanjutkan dan mencoba mencocokkan kembali karakter lain karena square bracket "[]" merupakan perintah untuk mencocokkan satu dari karakter yang dicari. Ketika karakter lau sudah ditemukan, maka selanjutnya akan mencari karakter t, kemudian berhenti disitu karena Regex Engine sudah menemukan teks yang cocok.
Latihan Regex dengan Square Braket
Dapatkah kalian menuliskan Regular Expression untuk menyamakan ketiga isitilah (yang berwarna biru) dibawah ini?String:
Apakah arti dari bin, min, dan cin?
Lihat jawaban atau solusinya disini.Dapatkah kalian menuliskan Regular Expression untuk menyamakan dua isitilah (yang berwarna biru) ini?
String:
Apakah arti dari bin, min, dan cin?
Lihat jawaban atau solusinya disini.Selamat, jika kalian sudah berhasil mengetahui jawaban dari dua latihan diatas, sekarang mari kita lanjutkan.
Urutan Escape atau Pengecualian (Escape Sequences) pada Regex
Pada step sebelumnya, kita sudah mempelajari tentang square bracket "[]" dan bagaimana cara untuk menggunakannya. Tetapi, bagaimana kalau kita ingin mencari atau mencocokkan teks karakter square bracket "[]"?Ketika kita ingin menyamakan teks-dengan-teks (seperti teks laut pada contoh sebelumnya), seperti pada contoh sebelumnya, kita dapat melakukan hal tersebut dengan cara seperti berikut:
Pattern:
[]
String:
Kalian tidak dapat mencocokkan karakter [] dengan Regex!.
Tentu saja cara diatas tidak akan bekerja. Hal tersebut dapat terjadi karena Square Bracket "[" dan "]" adalah karakter spesial yang biasanya digunakan untuk menunjukkan sesuatu selain dari setiap karakter. Seperti yang sudah saya tunjukkan pada contoh sebelumnya, karakter Square Bracket dapat kita gunakan untuk menyamakan teks alternatif. Jadi, Regex Engine dapat mencocokkan semua teks yang berada di dalamnya. Jika kalian tidak meletakkan karakter apapun di dalamnya, maka yang akan terjadi adalah error.
Untuk menyamakan karakter spesial tersebut, kita harus menggunakan metode Escape dengan mendahului karakter backslash (garis miring) "\". Karakter Backslash adalah salah satu karakter spesial yang dapat memberitahukan Regex Engine untuk menentukan karakter selanjutnya dan bukanlah sebagai karakter spesial. Dengan mendahului karakter Backslash "\" sebelum Square Bracket "[" dan "]", maka Regex Engine akan mencocokkan masing-masing dari karakter tersebut. Berikut adalah contohnya:
Pattern:
\[\]
String:
Kalian tidak dapat mencocokkan karakter [] dengan Regex!.
Lalu, jika kita ingin mencocokkan karakter Backslash "\", kita dapat menggunakan metode Escape dengan menyertakan dua Backslash "\\". Contoh:
Pattern:
\\
String:
C:\Users\Yasya\Documents
Hanya karakter spesial yang harus didahului dengan Backslash "\". Semua karakter lain secara Default dapat diartikan secara literal. Misalnya, Regular Expression untuk menyamakan teks t hanya akan menyamakan huruf t (huruf kecil/lowercase) secara literal. Berikut adalah contohnya:
Pattern:
t
String:
t t t t
Tetapi, jika kita menggunakan metode Escape seperti \t, jelas hasilnya akan semakin berbeda. Hasilnya kan menyamakan karakter tab (Ruang kosong). Contoh:
Pattern:
\t
String:
t t t t
Contoh lain untuk menggunaakan Escape Sequence adalah seperti \n (Line Break pada UNIX) dan \r (Line Break pada Windows, \r\n). \r adalah karakter "Carriage Return" dan \n adalah karakter "Line Feed".
Latihan Escape Sequence pada Regex
Dapatkah kalian mencocokkan karakter \[\] dengan Regex?String:
Cocokkan karakter "\[\]" dengan Regex.
Lihat jawaban atau solusinya disini.Dapatkah kalian mencocokkan karakter \r, \t, dan \n dengan Regex?
String:
\r, \t , dan \n adalah Escape Sequence dari Regex.
Lihat jawaban atau solusinya disini.Menyeleksi Semua Karakter pada Regex
Setelah mempelajari beberapa fungsi Regex diatas, pernahkan kalian membayangkan "cara untuk mencocokkan karakter backslash '\' kemudian menyeleksi semua karakter setelah backslash?" Jawabannya, tentu saja bisa.Terdapat karakter lain yang dapat kita gunakan untuk mencocokkan semua karakter, yaitu dengan menggunakan karakter titik ".". Berikut adalah contohnya:
Pattern:
.
String:
Halo semuanya, saya Yasya.
kalian dapat menggunakan contoh berikut jika kalian hanya ingin mencocokkan pattern seperti Escape Sequence:
Pattern:
\\.
String:
Halo semuanya, penulis artikel ini adalah "\n \r \t".
Jika kalian ingin mencocokkan semua karakter literal seperti tanda titik ".", kalian harus mendahului dengan karakter backslash "\". Berikut adalah contohnya:
Pattern:
\.
String:
Belajar itu Mudah. Coding itu Mudah. Semuanya itu Mudah jika kita mau Belajar.
Mencocokkan Rentang Karakter (Character Ranges) pada Regex
Bagaimana jika kalian tidak ingin mencocokkan semua karakter, tetapi hanya huruf atau angka? Solusinya, kita dapat menggnakan karakter Class dan Range.Jika karakternya tidak memiliki visibilitas atau tidak terlihat, maka karakter tersebut dinamakan dengan "Whitespace". Karakter spasi " " adalah Whitespace, sama seperti Line Break, atau Tab. Misalnya, kita ingin mencocokkan Escape Sequence seperti karakter Whitespace \n, \r, dan \t, tetapi tidak dengan Escape Sequence lain. Bagaimana solusinya?
Pattern:
\\[nrt]
String:
\n, \r, dan \t adalah karakter Whitespace. \, \\, dan \[ bukanlah karakter Whitespace.
Contoh diatas tentu saja dapat bekerja, tetapi tidaklah elegan. Bagaimana jika selanjutnya kita ingin mencocokkan Escape Sequence untuk karakter Form Feed "\f" (Karakter Form Feed digunakan untuk Page Break pada Teks)?
Pattern:
\\[nrt]
String:
\n, \r, \t. dan \f adalah karakter Whitespace. \, \\, dan \[ bukanlah karakter Whitespace.
Jika kita menggunakan contoh pattern diatas, maka kita harus menambahkan karakter kedalam pattern satu per satu. Cara termudah untuk mengatasi kasus ini adalah dengan menggunakan Rentang Karakter (Character Ranges) untuk mencocokkan huruf kecil (Lowercase). Berikut adalah contohnya:
Pattern:
\\[a-z]
String:
\n, \r, \t, \f adalah karakter Whitespace. \, \\, dan \[ bukanlah karakter Whitespace.
Rentang karakter (Character Ranges) dapat bekerja sesuai dengan keinginan kita, sama seperti contoh diatas. Kalian dapat menggunakan karakter pertama dan karakter terakhir untuk dapat dicocokkan pada Square Bracket dengan tanda hypen/min "-" diantara karakter tersebut. Contoh lain, jika kalian hanya ingin mencocokkan huruf a sampai m, kalian dapat menggunakannya seperti contoh berikut:
Pattern:
\\[a-m]
String:
\n, \r, \t, \f adalah karakter Whitespace. \, \\, dan \[ bukanlah karakter Whitespace.
Jika kalian ingin mencocokkan urutan karakter tertentu, kalian dapat menggunakan Regex seperti contoh berikut:
Pattern:
\\[a-gq-z]
String:
\n, \r, \t, \f adalah karakter Whitespace. \, \\, dan \[ bukanlah karakter Whitespace.
Contoh Character Range lain adalah seperti: A-Z dan 0-9.
Latihan Character Ranges pada Regex
Angka Hexadesimal dapat terdiri dari 0-9 dan huruf Hexadesimal dapat terdiri dari A-F. Ketika kita ingin menggunakan warna tertentu, kode "Hex" dapat terdiri hanya dengan tiga karakter. Disini, buatlah sebuah Regex untuk mencari kode Hex yang benar.String:
1H8 4E2 8FF 0P1 T8B 776 42B G12
Lihat jawaban atau solusinya disini.Dengan menggunakan Ranges, buatlah sebuah Regex yang hanya menyeleksi huruf kecil konsonan (karakter non-vokal - selain karakter a, i, u, e, dan o).
String:
Ular melingkar lingkar diatas pagar.
Lihat jawaban atau solusinya disini.Mencocokkan "Bukan" Karakter pada Regex
Apakah kalian sudah mengerti jawaban terakhir dari latihan diatas (menyeleksi huruf kecil konsonan)? Jika belum, lihatlah jawabannya terlebih dahulu. Disana, saya mencocokkan dengan rentang karakter, tetapi tahukan kalian bahwasannya terdapat cara yang lebih mudah? Jawabannya ada di bagian ini.Karakter "Bukan" (ditulis dengan simbol/karakter "^") dapat kita gunakan untuk menentukan karakter dan rentang karakter yang tidak akan dicocokkan oleh Regex Engine. Solusi termudah dari Latihan terakhir diatas (menyeleksi huruf kecil konsonan) adalah seperti berikut:
Pattern:
[^aiueo]
String:
Ular melingkar lingkar diatas pagar.
Karakter "^" yang ada di dalam Square Bracket dapat memberitahukan Regex Engine untuk mencocokkan satu karakter yang tidak/bukan berada di dalamnya. Artinya, semua karakter seperti tanda titik ".", koma ",", whitespace, huruf besar, dll juga akan di cocokkan. Untuk mengecualikannya, kita dapat menambahkan karakter tersebut kedalam Square Bracket. Berikut adalah contohnya:
Pattern:
[^aiueo .,U]
String:
Ular melingkar lingkar diatas pagar.
Perlu dicatat bahwasannya kita tidak perlu menggunakan Escape Sequence. Karakter spesial yang berada di dalam Square Bracket akan diperlukan secara literal, teramasuk Square Bracket "[" - tetapi bukan "]" (apa kalian tahu mengapa?). Karakter Backslash "\" juga tidak diperlukan secara literal. Jika kalian ingin mencocokkan karakter backslash "\" dengan Square Bracket, kalian harus menggunakan Escape Sequence dan mendahuluinya dengan dua backslash "\\". Kita dapat menggunakan contoh berikut agar karakter whitespace dapat dicocokkan dalam square bracket:
Pattern:
[\t]
String:
t t t t
Karakter "^" juga dapat kita gunakan bersamaan dengan Ranges. Misalnya, jika kita hanya ingin mencocokkan karakter a, b, c, x, y, dan z, kita dapat membuatnya seperti berikut:
Pattern:
[abcxyz]
String:
abcdefghijklmnopqrstuvwxyz
Dengan menggunakan karakter "^", kita dapat mencocokkan semua karakter yang bukan diantara d dan w:
Pattern:
[^d-w]
String:
abcdefghijklmnopqrstuvwxyz
Perlu untuk kalian ingat bahwasanya kalian harus hati-hati dalam menggunakan karakter "^". Misal, Jika pattern nya seperti [^b-f], jadi kita hanya akan mendapatkan huruf kecil a, atau semua huruf setelah f. Bukan itu masalahnya. Regex akan mencocokkan semua karakter yang bukan/tidak ada dalam rangkaian karakter, termasuk angka, simbol, dan whitespace.
Pattern:
[^d-w]
String:
abcdefg h.i,j-klmnopqrstuvwxyz
Itulah beberapa Teknik Dasar untuk Menguasai Regular Expressions. Saya berharap artikel ini bermanfaat bagi kalian dan dapat meningkatkan keinginan dalam mempelajari Regex - Regular Expression. Jika kalian masih bingung, silahkan tulis di kolom komentar. Terimakasih.
Share:
Yasya El Hakim
404 Not Found!
You may like these posts
Comments
Comments