Ekspresi reguler
![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/The_river_effect_in_justified_text.jpg/220px-The_river_effect_in_justified_text.jpg)
(?<=\.) {2,}(?=[A-Z])
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Kleene.jpg/170px-Kleene.jpg)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Screenshot_of_MediaWiki_Blacklist.png/220px-Screenshot_of_MediaWiki_Blacklist.png)
Ekspresi reguler (bahasa Inggris: regular expression, dipendekkan menjadi regex atau regexp;[1] juga disebut ekspresi rasional)[2][3] 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.[4][5] 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[6] dan analisis leksikal dalam kompilator.[7] 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.[6][8][9][10] 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.[11] 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"[12]). 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.[7]
Banyak variasi dari bentuk-bentuk awal ekspresi reguler digunakan di program-program Unix[10] 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.[13] 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.[14] Perl kemudian memperluas pustaka awal Spencer untuk menambahkan banyak fitur baru.[15] 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.[16] 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 (bahasa Inggris: regex machine), dan terdapat pustaka-pustaka yang bisa digunakan. Pada akhir 2010-an, beberapa perusahaan mulai menawarkan perangkat keras, FPGA,[17] implementasi GPU[18] dari mesin ekspresi reguler yang kompatibel PCRE yang lebih cepat dibandingkan dengan implementasi CPU.
Referensi
- ^ Goyvaerts, Jan. "Regular Expression Tutorial - Learn How to Use Regular Expressions". www.regular-expressions.info.
- ^ Ruslan Mitkov (2003). The Oxford Handbook of Computational Linguistics. Oxford University Press. hlm. 754. ISBN 978-0-19-927634-9.
- ^ Mark V. Lawson (17 September 2003). Finite Automata. CRC Press. hlm. 98–100. ISBN 978-1-58488-255-8.
- ^ Kleene 1951.
- ^ Leung, Hing (16 September 2010). "Regular Languages and Finite Automata" (PDF). New Mexico State University. Diarsipkan dari versi asli (pdf) tanggal 5 December 2013. Diakses tanggal 13 August 2019.
The concept of regular events was introduced by Kleene via the definition of regular expressions.
- ^ a b Thompson 1968.
- ^ a b Johnson et al. 1968.
- ^ Kernighan, Brian (2007-08-08). "A Regular Expressions Matcher". Beautiful Code. O'Reilly Media. hlm. 1–2. ISBN 978-0-596-51004-6. Diakses tanggal 2013-05-15.
- ^ Ritchie, Dennis M. "An incomplete history of the QED Text Editor". Diarsipkan dari versi asli tanggal 1999-02-21. Diakses tanggal 9 October 2013. Parameter
|url-status=
yang tidak diketahui akan diabaikan (bantuan) - ^ a b Aho & Ullman 1992, 10.11 Bibliographic Notes for Chapter 10, p. 589.
- ^ Aycock 2003, 2. JIT Compilation Techniques, 2.1 Genesis, p. 98.
- ^ Raymond, Eric S. citing Dennis Ritchie (2003). "Jargon File 4.4.7: grep".
- ^ "New Regular Expression Features in Tcl 8.1". Diakses tanggal 2013-10-11.
- ^ "PostgreSQL 9.3.1 Documentation: 9.7. Pattern Matching". Diakses tanggal 2013-10-12.
- ^ Wall, Larry and the Perl 5 development team (2006). "perlre: Perl regular expressions".
- ^ Wall 2002
- ^ "GROVF | Big Data Analytics Acceleration". grovf.com (dalam bahasa Inggris). Diakses tanggal 2019-10-22.
- ^ "CUDA grep". bkase.github.io. Diakses tanggal 2019-10-22.
Daftar pustaka
- Aho, Alfred V.; Ullman, Jeffrey D. (1992). "Chapter 10. Patterns, Automata, and Regular Expressions" (PDF). Foundations of Computer Science.
- Johnson, Walter L.; Porter, James H.; Ackley, Stephanie I.; Ross, Douglas T. (1968). "Automatic generation of efficient lexical processors using finite state techniques". Communications of the ACM. 11 (12): 805–813. doi:10.1145/364175.364185.
- Kleene, Stephen C. (1951). Shannon, Claude E.; McCarthy, John, ed. Representation of Events in Nerve Nets and Finite Automata (PDF). Automata Studies. Princeton University Press. hlm. 3–42.
- Thompson, Ken (1968). "Programming Techniques: Regular expression search algorithm". Communications of the ACM. 11 (6): 419–422. doi:10.1145/363347.363387.
- Wall, Larry (2002). "Apocalypse 5: Pattern Matching".
Pranala luar
Media tentang Regex di Wikimedia Commons
- Regular Expressions di Curlie (dari DMOZ)
- 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