Home > Akhirnya aku tahu > Peran karakter “backslash” pada regular expression di Java

Peran karakter “backslash” pada regular expression di Java

Hari ini, giliran ngulik Java.
Ceritanya, beberapa hari lalu saya memutuskan untuk menyimpan pengetahuan mengenai format suatu file teks melalui pola regex di SQLite. Pada saat uji coba, saya memasukkan karakter pola regex langsung ke class Pattern. Contohnya adalah potongan code berikut ini.
Pattern c = Pattern.compile(" [a-zA-Z][\\s]+[0-9]+[\\s]+[0-9]+[-][\\s]+[0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\\s]+[0-9]+[.][0-9]+[\\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\\s]+[A-Z]+[-][0-9]+.*");
[Code 0]


Karena dengan cara serupa pendeteksian format file teks berjalan lancar, karakter regex tersebut saya simpan apa adanya ke dalam SQLite untuk kemudian saya query dan lakukan pattern matching. Hasilnya, tidak ada baris teks dalam file yang sesuai dengan karakter pattern yang saya simpan di SQLite. Aneh, padahal jika dilakukan dengan cara sederhana seperti potongan code di atas berhasil.
Akhirnya, setelah lama penasaran akhirnya masalahnya ketemu. Saya tidak menyangka, ketika saya minta karakter regex dicetak langsung ke layar, satu karakter “backslash” (\) pada penanda whitespace hilang, sehingga pola regexnya menjadi seperti berikut.
[a-zA-Z][\s]+[0-9]+[\s]+[0-9]+[-][\s]+[0-9]+[\s]+[0-9]+[.][0-9]+[\s]+[0-9]+[.][0-9]+[\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\s]+[0-9]+[.][0-9]+[\s]+[0-9]+[.][0-9]+[E][+][0-9]+[\s]+[A-Z]+[-][0-9]+.* . [Code 1]
Alasannya, berdasarkan dokumentasi JDK (dapat diperoleh dengan jelas di sini), representasi karakter untuk regex memerlukan escape character dalam bentuk karakter “backslash” ganda. Ketika disimpan sebagai variabel String, maka escape character tadi diabaikan. Detilnya perlu saya pelajari lebih lanjut nih, Insya Allah di tulisan-tulisan berikutnya. Karenanya, pola regex yang saya simpan dalam SQLite berupa variable String menjadi tidak cocok lagi.
Solusinya, pola regex yang saya simpan pada SQLite harus mengikuti pola seperti pada [Code 1]. Alhamdulillah, tambah lagi yang saya tahu hari ini.

Advertisement
Categories: Akhirnya aku tahu

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.