Ekspresi reguler

Ekspresi reguler (, dipendekkan menjadi regex atau regexp; juga disebut ekspresi rasional) adalah serangkaian karakter yang mendefinisikan sebuah pola pencarian. Pola tersebut biasanya digunakan oleh algoritme pencarian string untuk melakukan operasi "cari" atau "cari dan ganti" pada string, atau untuk memeriksa string masukan. Ekspresi reguler merupakan teknik yang dikembangakan dalam bidang ilmu komputer teori dan teori bahasa formal.

Konsep ini muncul pada 1950-an ketika matematikawan Amerika Stephen Cole Kleene memformalkan deskripsi sebuah bahasa reguler. Konsep ini menjadi banyak digunakan untuk utilitas pengolahan teks Unix. Beberapa sintaks untuk menulis ekspresi reguler telah dibuat sejak 1980-an, salah satunya adalah standar POSIX dan yang satu lagi, yang sering digunakan, adalah sintaks Perl.

Ekspresi reguler digunakan dalam mesin pencari, dialog cari dan ganti dalam pengolah kata dan penyunting teks, dalam utilitas pengolahan teks seperti sed dan AWK dan dalam analisis leksikal. Kebanyakan bahasa pemrograman menyediakan pengolah ekspresi reguler baik secara bawaan atau melalui pustaka.

Sejarah
Ekspresi reguler berawal pada tahun 1951, ketika matematikawan Stephen Cole Kleene menjelaskan bahasa reguler menggunakan notasi matematikanya yang disebut regular events. Notasi ini dilahirkan dari bidang ilmu komputer teori, dalam subbidang teori otomata (pemodelan komputasi) dan deskripsi dan klasifikasi bahasa formal. Implementasi pencocokan pola lainnya di antaranya adalah bahasa SNOBOL, yang tidak menggunakan ekspresi reguler, melainkan menggunakan konstruksi pencocokan polanya sendiri.

Ekspresi reguler menjadi populer sejak tahun 1968 dalam dua jenis penggunaan: pencocokan pola dalam penyunting teks dan analisis leksikal dalam kompilator. Salah satu kemunculan pertama ekspresi reguler dalam bentuk program adalah ketika Ken Thompson menggunakan notasi Kleene dalam penyunting QED sebagai cara mencocokkan pola dalam berkas teks. Demi kecepatan, Thompson mengimplementasikan pencocokan ekspresi reguler dengan melakukan kompilasi tepat waktu (JIT) ke kode IBM 7094 di Compatible Time-Sharing System, sebuah contoh awal penting dari kompilasi JIT. Dia kemudian menambahkan kemampuan ini ke penyunting Unix ed, yang kemudian berujung pada peralatan pencari populer grep menggunakan ekspresi reguler ("grep" adalah kata yang diturunkan dari perintah untuk mencari ekspresi reguler di penyunting ed: g/re/p, singkatan dari "Global search for Regular Expression and Print matching lines"). Pada saat yang sama dengan Thompson mengembangkan QED, sekelompok peneliti di antaranya Douglas T. Ross mengimplementasikan sebuah perkakas berdasar ekspresi reguler yang digunakan untuk analisis leksikal dalam perancangan kompilator.

Banyak variasi dari bentuk-bentuk awal ekspresi reguler digunakan di program-program Unix di Bell Labs pada 1970-an, di antaranya adalah vi, lex, sed, AWK, dan expr, dan program lainnya seperti Emacs. Ekspresi reguler kemudian diadopsi oleh berbagai jenis program, dengan bentuk-bentuk awalnya distandarkan sebagai standar POSIX.2 pada tahun 1992.

Pada 1980-an ekspresi reguler yang lebih rumit muncul dalam Perl, yang awalnya diturunkan dari sebuah pustaka ekspresi reguler yang ditulis oleh Henry Spencer (1986), yang kemudian menuliskan sebuah implementasi Advanced Regular Expressions untuk Tcl. Pustaka Tcl merupakan impelementasi gabungan NFA/DFA dengan karakteristik performa yang meningkat. Proyek perangkat lunak yang telah mengadopsi implementasi ekspresi reguler Tcl Spencer di antaranya adalah PostgreSQL. Perl kemudian memperluas pustaka awal Spencer untuk menambahkan banyak fitur baru. Salah satu bagian dari alasan mendesain Raku adalah untuk memperbaiki integrasi ekpresi reguler Perl, dan untuk meningkatkan kemampuannya untuk memungkinkan mendefinisikan tata bahasa penguraian ekspresi. Hasilnya adalah sebuah bahasa mini yang disebut aturan Raku, yang digunakan untuk mendefinisikan tata bahasa Raku serta menyediakan peralatan untuk pemrogram bahasa Raku. Aturan-aturan ini mempertahankan fitur yang sudah ada dalam ekspresi reguler Perl 5.x, tetapi juga memungkinkan definisi pengurai turun rekursif bergaya BNF melalui subaturan.

Penggunaan ekspresi reguler dalam standar informsi terstruktur untuk pemodelan dokumen dan basis data dimulai pada 1960-an dan diperluas pada 1980-an ketika standar industri seperti ISO SGML (didahului oleh "GCA 101-1983" ANSI) berkonsolidasi. Kernel dari standar bahasa spesifikasi struktur terdiri dari ekspresi reguler. Penggunaannya paling terlihat dalam sintaks grup elemen DTD.

Mulai tahun 1997, Philip Hazel mengemangkan PCRE (Perl Compatible Regular Expressions), yang mencoba menirukan fungsionalitas ekspresi reguler Perl dan digunakan dalam banyak perkakas modern seperti PHP dan Apache HTTP Server.

Sekarang, ekspresi reguler didukung oleh banyak bahasa pemrograman, program pengolah teks (khususnya lekser), penyunting teks yang lebih maju, dan beberapa program lain. Dukungan untuk ekspresi reguler merupakan bagian dari pustaka standar banyak bahasa pemrograman, seperti Java dan Python, dan merupakan bagian dari sintaks bahasa pemrograman lainnya, seperti Perl dan ECMAScript. Implementasi dari fungsionalitas ekspresi reguler disebut sebuah mesin ekspresi reguler (), dan terdapat pustaka-pustaka yang bisa digunakan. Pada akhir 2010-an, beberapa perusahaan mulai menawarkan perangkat keras, FPGA, implementasi GPU dari mesin ekspresi reguler yang kompatibel PCRE yang lebih cepat dibandingkan dengan implementasi CPU.

 Referensi 

Daftar pustaka







Pranala luar



 ISO/IEC 9945-2:1993 Information technology – Portable Operating System Interface (POSIX) – Part 2: Shell and Utilities
 ISO/IEC 9945-2:2002 Information technology – Portable Operating System Interface (POSIX) – Part 2: System Interfaces
 ISO/IEC 9945-2:2003 Information technology – Portable Operating System Interface (POSIX) – Part 2: System Interfaces
 ISO/IEC/IEEE 9945:2009 Information technology – Portable Operating System Interface (POSIX®) Base Specifications, Issue 7
 Regular Expression, IEEE Std 1003.1-2017, Open Group


Kategori:Bahasa formal
Kategori:Konstruksi pemrograman
Kategori:Otomata (komputasi)
Kategori:Pencocokan pola
Kategori:Perkenalan tahun 1951