Ekspresi reguler: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
k Bot: Perubahan kosmetika |
Wagino Bot (bicara | kontrib) |
||
(3 revisi perantara oleh 2 pengguna tidak ditampilkan) | |||
Baris 1:
[[Berkas:The river effect in justified text.jpg|thumb|Hasil pencocokan dari pola {{sxhl|2=ragel|1=(?<=\.) {2,}(?=[A-Z])}} Paling tidak dua spasi akan dianggap cocok, tetapi hanya apabila keduanya terletak langsung setelah tanda titik (.) dan sebelum huruf kapital.]]
[[Berkas:Kleene.jpg|thumb|upright|[[Stephen Cole Kleene]], yang membantu menciptakan konsepnya]]
[[Berkas:Screenshot of MediaWiki Blacklist.png|thumb|[[MediaWiki:Titleblacklist|Sebuah daftar hitam]] di [[Wikipedia]] yang menggunakan ekspresi reguler untuk mengenali judul yang buruk]]
'''Ekspresi reguler''' ({{lang-en|regular expression}}, dipendekkan menjadi '''regex''' atau '''regexp''';<ref name="GoyvaertasTutorial"/> juga disebut '''ekspresi rasional''')<ref name="Mitkov2003"/><ref name="Lawson2003"/> adalah serangkaian [[Karakter (komputasi)|karakter]] yang mendefinisikan sebuah ''[[pencocokan pola|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 (bahasa pemrograman)|sintaks]] untuk menulis ekspresi reguler telah dibuat sejak 1980-an<!---perkenalan POSIX dan Perl--->, 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 (perangkat lunak)|pustaka]].
==Sejarah==
Ekspresi reguler berawal pada tahun 1951, ketika matematikawan [[Stephen Cole Kleene]] menjelaskan [[bahasa reguler]] menggunakan notasi matematikanya yang disebut ''regular events''.{{sfn|Kleene|1951}}<ref name = "Leung, New Mexico State University, 2010" /> 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{{sfn|Thompson|1968}} dan analisis leksikal dalam kompilator.{{sfn|Johnson|Porter|Ackley|Ross|1968}} Salah satu kemunculan pertama ekspresi reguler dalam bentuk program adalah ketika [[Ken Thompson]] menggunakan notasi Kleene dalam penyunting [[QED (penyunting teks)|QED]] sebagai cara mencocokkan pola dalam [[berkas teks]].{{sfn|Thompson|1968}}<ref name="Beautiful Code Kernighan"/><ref name="RitchieQED"/>{{sfn|Aho|Ullman|1992|loc=10.11 Bibliographic Notes for Chapter 10, p. 589}} 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.{{sfn|Aycock|2003|loc=2. JIT Compilation Techniques, 2.1 Genesis, p. 98}} Dia kemudian menambahkan kemampuan ini ke penyunting Unix [[ed (penyunting teks)|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: <code>g/''re''/p</code>, singkatan dari "''Global search for Regular Expression and Print matching lines''"<ref name="Raymond2003"/>). 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]].{{sfn|Johnson|Porter|Ackley|Ross|1968}}
Banyak variasi dari bentuk-bentuk awal ekspresi reguler digunakan di program-program [[Unix]]{{sfn|Aho|Ullman|1992|loc=10.11 Bibliographic Notes for Chapter 10, p. 589}} di [[Bell Labs]] pada 1970-an, di antaranya adalah [[vi]], [[Lex (perangkat lunak)|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]].<ref name="NewRegulerExpression"/> Pustaka Tcl merupakan impelementasi gabungan [[Nondeterministic finite automaton|NFA]]/[[Deterministic finite automaton|DFA]] dengan karakteristik performa yang meningkat. Proyek perangkat lunak yang telah mengadopsi implementasi ekspresi reguler Tcl Spencer di antaranya adalah [[PostgreSQL]].<ref name="PostgreSQL9.3.1"/> Perl kemudian memperluas pustaka awal Spencer untuk menambahkan banyak fitur baru.<ref name="Wall2006"/> Salah satu bagian dari alasan mendesain [[Raku (bahasa pemrograman)|Raku]] adalah untuk memperbaiki integrasi ekpresi reguler Perl, dan untuk meningkatkan kemampuannya untuk memungkinkan mendefinisikan [[tata bahasa penguraian ekspresi]].<ref name="Apocalypse5"/> 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 [[bentuk Backus–Naur|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 [[Standard Generalized Markup Language|ISO SGML]] (didahului oleh "GCA 101-1983" ANSI) berkonsolidasi. Kernel dari standar [[Skema XML#Validasi|bahasa spesifikasi struktur]] terdiri dari ekspresi reguler. Penggunaannya paling terlihat dalam sintaks grup elemen [[Definisi jenis dokumen|DTD]].
Mulai tahun 1997, [[Philip Hazel]] mengemangkan [[Perl Compatible Regular Expressions|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 (bahasa pemrograman)|Java]] dan [[Python (bahasa pemrograman)|Python]], dan merupakan bagian dari sintaks bahasa pemrograman lainnya, seperti Perl dan [[ECMAScript]]. Implementasi dari fungsionalitas ekspresi reguler disebut sebuah '''mesin ekspresi reguler''' ({{lang-en|'''regex machine'''}}), dan terdapat pustaka-pustaka yang bisa digunakan. Pada akhir 2010-an, beberapa perusahaan mulai menawarkan perangkat keras, [[FPGA]],<ref>{{Cite web|url=https://grovf.com/products/gregex|title=GROVF {{!}} Big Data Analytics Acceleration|website=grovf.com|language=en|access-date=2019-10-22}}</ref> implementasi [[GPU]]<ref>{{Cite web|url=http://bkase.github.io/CUDA-grep/finalreport.html|title=CUDA grep|website=bkase.github.io|access-date=2019-10-22}}</ref> dari mesin ekspresi reguler yang kompatibel [[PCRE]] yang lebih cepat dibandingkan dengan implementasi [[CPU]].
<!--
== ==
Language ini disebut regular language
Perhatikan:
Baris 36 ⟶ 56:
Language L1 di atas berisi sebuah x lalu diikuti dengan sejumlah x (dimana mungkin saja tanpa x sama sekali)
L1 dapat dituliskan dengan notasi lain, yaitu notasi +
L1 dapat juga didefinisikan dengan salah satu contoh di bawah ini:
Baris 89 ⟶ 109:
atau dengan lebih singkat
L = language ((a + b)3)
-->
== Referensi ==
{{Reflist|refs=
<ref name="GoyvaertasTutorial">{{cite web|url=http://www.regular-expressions.info/tutorial.html|title=Regular Expression Tutorial - Learn How to Use Regular Expressions|first=Jan|last=Goyvaerts|website=www.regular-expressions.info}}</ref>
<ref name="Beautiful Code Kernighan">{{cite book | last1 = Kernighan | first1 = Brian | authorlink1 = Brian Kernighan | title = Beautiful Code | chapter = A Regular Expressions Matcher | publisher = [[O'Reilly Media]] | pages = 1–2 | chapter-url = http://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html | accessdate = 2013-05-15 | isbn = 978-0-596-51004-6| date = 2007-08-08 }}</ref>
<ref name="Lawson2003">{{cite book|author=Mark V. Lawson|title=Finite Automata|url=https://books.google.com/books?id=MDQ_K7-z2AMC&pg=PA98|date=17 September 2003|publisher=CRC Press|isbn=978-1-58488-255-8|pages=98–100}}</ref>
<ref name = "Leung, New Mexico State University, 2010" >{{ Cite web | url = https://www.cs.nmsu.edu/historical-projects/Projects/kleene.9.16.10.pdf | title = Regular Languages and Finite Automata | access-date = 13 August 2019 | first = Hing | last = Leung | date = 16 September 2010 | website = [[New Mexico State University]] | quote = The concept of regular events was introduced by Kleene via the definition of regular expressions. | format = pdf | archive-url = https://web.archive.org/web/20131205193130/https://www.cs.nmsu.edu/historical-projects/Projects/kleene.9.16.10.pdf | archive-date = 5 December 2013 | df = dmy-all }}</ref>
<ref name="Mitkov2003">{{cite book|author=Ruslan Mitkov|title=The Oxford Handbook of Computational Linguistics|url=https://books.google.com/books?id=yl6AnaKtVAkC&pg=PA754|year=2003|publisher=Oxford University Press|isbn=978-0-19-927634-9|page=754}}</ref>
<ref name="NewRegulerExpression">{{cite web | url = http://www.tcl.tk/doc/howto/regexp81.html | title = New Regular Expression Features in Tcl 8.1 | accessdate = 2013-10-11}}</ref>
<ref name="PostgreSQL9.3.1">{{cite web | url = http://www.postgresql.org/docs/9.3/interactive/functions-matching.html | title = PostgreSQL 9.3.1 Documentation: 9.7. Pattern Matching | accessdate = 2013-10-12}}</ref>
<ref name="Raymond2003">{{cite web | url=http://catb.org/jargon/html/G/grep.html | title=Jargon File 4.4.7: grep | author=[[Eric S. Raymond|Raymond, Eric S.]] citing [[Dennis Ritchie]] | year=2003}}</ref>
<ref name="RitchieQED">{{cite web |url=http://cm.bell-labs.com/who/dmr/qed.html |title=An incomplete history of the QED Text Editor |last1=Ritchie |first1=Dennis M. |publisher= |accessdate=9 October 2013 |archive-url=https://web.archive.org/web/19990221023422/http://cm.bell-labs.com/who/dmr/qed.html |archive-date=1999-02-21 |url-status=dead |df= }}</ref>
<ref name="Apocalypse5">{{harvnb|Wall|2002}}</ref>
<ref name="Wall2006">{{cite web | url=http://perldoc.perl.org/perlre.html | title=perlre: Perl regular expressions | author=[[Larry Wall|Wall, Larry]] and the Perl 5 development team | year=2006}}</ref>
}}
==Daftar pustaka==
{{Refbegin}}
* {{cite book
| last1 = Aho
| first1 = Alfred V.
| last2 = Ullman
| first2 = Jeffrey D.
| authorlink2 = Jeffrey Ullman
| year = 1992
| title = Foundations of Computer Science
| url = http://infolab.stanford.edu/~ullman/focs.html
| chapter = Chapter 10. Patterns, Automata, and Regular Expressions
| chapterurl = http://infolab.stanford.edu/~ullman/focs/ch10.pdf
}}
* {{Cite journal |last1=Johnson |first1=Walter L. |last2=Porter |first2=James H. |last3=Ackley |first3=Stephanie I. |last4=Ross |first4=Douglas T. |title=Automatic generation of efficient lexical processors using finite state techniques |doi=10.1145/364175.364185 |journal=Communications of the ACM |volume=11 |issue=12 |pages=805–813 |year=1968 }}
* {{cite book
|last = Kleene
|first = Stephen C.
|title = Representation of Events in Nerve Nets and Finite Automata
|work = Automata Studies
|editor1-last = Shannon
|editor1-first = Claude E.
|editor2-last = McCarthy
|editor2-first = John
|url = https://www.rand.org/content/dam/rand/pubs/research_memoranda/2008/RM704.pdf
|publisher = Princeton University Press
|year = 1951
|pages = 3–42
|ref = harv
|postscript = <!--None-->
}}
* {{Cite journal | last = Thompson | first = Ken | authorlink = Ken Thompson | title = Programming Techniques: Regular expression search algorithm | doi = 10.1145/363347.363387 | journal = Communications of the ACM | volume = 11 | issue = 6 | pages = 419–422 | year = 1968 }}
* {{cite web
| url=http://dev.perl.org/perl6/doc/design/apo/A05.html
| title=Apocalypse 5: Pattern Matching
| first=Larry
| last=Wall
| authorlink=Larry Wall
| year=2002
}}
{{refend}}
==Pranala luar==
<!-- Please note: There are thousands of regex tools in existence. Since Wikipedia is not a repository of links (see [[WP:NOT]] and [[WP:LINKS]]), please do not add links to such resources. They will likely be removed. -->
* {{Commons category-inline|Regex}}
* {{curlie|Computers/Programming/Languages/Regular_Expressions|Regular Expressions}}
* ISO/IEC 9945-2:1993 [http://www.iso.org/iso/catalogue_detail.htm?csnumber=17841 ''Information technology – Portable Operating System Interface (POSIX) – Part 2: Shell and Utilities'']
* ISO/IEC 9945-2:2002 [http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=37313 ''Information technology – Portable Operating System Interface (POSIX) – Part 2: System Interfaces'']
* ISO/IEC 9945-2:2003 [http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=38790 ''Information technology – Portable Operating System Interface (POSIX) – Part 2: System Interfaces'']
* ISO/IEC/IEEE 9945:2009 [http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50516 ''Information technology – Portable Operating System Interface (POSIX®) Base Specifications, Issue 7'']
* [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html Regular Expression, IEEE Std 1003.1-2017, Open Group]
{{Authority control}}
[[Kategori:
[[Kategori:
[[Kategori:Konstruksi pemrograman]]
[[Kategori:Otomata (komputasi)]]
[[Kategori:Pencocokan pola]]
[[Kategori:Perkenalan tahun 1951]]
|