Lalu Bagaimana proses Regex bekerja ?

Cukup menakjubkan ketika melihat kita menuliskan misalnya : [0-9] di command line, nanti akan didapatkan baris yang hanya mengandung angka saja.

grep [0-9] <<< "1234test" --> hasilnya 1234test ,
artinya text yang mengandung angka berhasil didapatkan.

grep [0-9] <<< "test" --> hasilnya text kosong ,
artinya text yang mengandung angka tidak berhasil didapatkan.

Bagaimana itu bisa terjadi ?

Regex Engine

Agar regex bisa diterjemahkan, maka harus ada Engine untuk memproses regex expression dan teks yang mau di proses. Anggap saja engine ini adalah algoritma untuk memproses regex expression dan teks yang mau diproses.

Algoritmanya ini umumnya dibuat dengan konsep Teori Otomata atau Teori Bahasa Formal dalam istilah ilmu komputer. Dimana ada state dan transition yang dibuat berdasarkan regex yang diinput.

Misalnya dari regex \b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b, regex engine akan membuat Finite State Machine dari regex tersebut.

Ada 2 cara/metoda yang dipakai untuk membuat Finite State Machine ini :

  1. Deterministic Finite Automata (DFA).
  2. Non-Deterministic Finite Automata (NFA).

Kedua cara ini menjadi landasan utama dari beberapa implementasi Regex Engine.

Lalu apa yang dilakukan regex engine ini ?

Prosesnya biasa saja sebenarnya, salah satu atau kombinasi metoda Finite State Machine diatas akan dipakai akan melakukan pengecekan antara regex expression dengan teks yang diinput.

Kalau cocok, akan mengembalikan hasil seperti yang diharapkan. Kalau tidak akan mengembalikan error atau pesan kesalahan terhadap program yang memanggilnya.

Tiap tools yang menggunakan regular expression bisa saja berbeda jenis metoda yang digunakannya.

Misalkan :

  1. perintah grep di Linux, menggunakan NFA.
  2. perintah egrep atau grep -Edi Linux, menggunakan DFA.
  3. java.util.regex menggunakan NFA.
  4. Perl menggunakan NFA.

Tetapi ada juga yang melakukan kombinasi antara 2 metoda ini, entah kombinasinya on the fly, atau incremental. Ada kelebihan dan kekurangan dari tiap metoda DFA atau NFA ini, yang tidak kita bahas disini.