Terkadang kalau kita jalankan perintah regex menggunakan tools atau cara yang berbeda akan menghasilkan hasil yang agak berbeda.

misal :

kita ingin mencocokkan apakah string ‘123’ terdiri dari 3 digit.

>> echo '123' | grep '\d\d\d' -->  hasilnya :   (kosong)

>> echo '123' | grep -P '\d\d\d' -->  hasilnya :  123

Kenapa hasilnya berbeda ?

Hal ini karena grep dan grep -P menggunakan dialek yang berbeda.

  • grep menggunakan dialek Basic Regular Expression (BRE).
  • grep -P menggunakan dialek Perl Compatible Regular Expression (PCRE)

6 Regex Dialect

  1. BRE -> Base Regular Expression
  2. ERE -> Extended Regular Expression
  3. Emacs
  4. ViM
  5. PCRE -> Perl Compatible Regular Expression Umumnya bahasa-bahasa pemrograman memakai dialek ini, seperti JavaScript, Phyton, Java, .NET, dll
  6. Perl 6

Apa sih sebenarnya Regex Dialect itu ?

Regex Dialect hampir sama dengan dialek bahasa manusia. Ada sintaks dasar yang semua dialek menerima. Akan tetapi ada sintaks/istilah khusus yang cuma bisa dimengerti di dialek tertentu.

Regex Dialect lebih kepada perbedaan sintaks dan fitur yang didukung oleh masing-masing dialek.

Kenapa banyak sekali Regex Dialect ini ?

Karena pada awalnya hanya beberapa sintaks dasar yang dianggap sebagai bagian dari Regular Expression , seperti :

  1. Concatenation, dimana satu karakter diletakkan setelah karakter lain
  2. Union –> |
  3. Multiplication –> *

Sementara fitur-fitur lain, seperti shorthand, capturing, character class, cardinality, backtracking, dll, ditambahkan kemudian sesuai kebutuhan yang semakin kompleks.

Penambahan ini bisa berbeda di tiap-tiap Dialect. Dan tidak ada standarisasi untuk sintak tambahan tersebut. Yang ada adalah ide untuk menyamakan sintaks, tetapi tetap tidak 100% sama. Oleh karenanya ada basis dialek yang diacu sebagai patokan untuk menyebut tipe Regex Engine tersebut.

Umumnya di bahasa pemrograman modern sekarang, dialek yang dipakai adalah PCRE (Perl Compatible Regular Expression), seperti di Java, JavaScript, .NET, Phyton, dll. Walaupun disebut PCRE, bukan berarti 100% compatible, tetapi mostly compatible :)