Darkc0der
20th November 2011, 10:51 PM
:ceriwislove:Regular Expression:ceriwislove:
Sebelumnya, newbie minta sori jika thread serupa sudah pernah ada...
emang sih sudah pernah ada, http://www.kaskus.us/search_result.php?q=regex
namun alangkah baiknya jika dibuat thread resmi aja.. :D
supaya segala permasalahan tentang regex bisa dibahas di sini dan supaya mudah mencari nya....
Intro dari Saya:
ReGex (atau dikenal dengan regexp), kependekan dari Regular Expression adalah sekumpulan teks yang disusun sedemikian rupa berbentuk suatu pola, yang berguna untuk melakukan pencarian terhadap suatu string yang cocok dengan pola tersebut...
Regex sangat lumrah digunakan dalam berbagai bahasa pemrograman untuk memproses atau mencari teks/string dalam jumlah banyak dan atau dengan format tertentu tanpa harus mencari string satu per satu...
Misalnya untuk mencari format email, alamat URL, nomor telepon, dll lebih banyak lagi.
Adalah banyak sekali tutorial Regex di belantara Internet ini, namun masih saja kita kadang bingung dibuatnya. Kenapa? karena memang regex ini tidaklah mudah untuk dimengerti (paling tidak menurut saya)...
Oleh karena itu saya buat thread ini supaya para master2 programmer yang pada turun gunung sudi kira nya berbagi ilmu kanuragannya disini... :D
Regex digunakan oleh banyak sekali bahasa pemrograman, diantaranya
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
REALbasic
Ruby
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
XQuery & XPath
Sedikit Tutorial Tentang Regex
Tutorial berikut saya copas dari www.master.web.id (http://www.master.web.id/mwmag/issue/01/content/tutorial-regex-1/tutorial-regex-1.html) karangan mas Steven Haryanto ,saya pecah jadi 2 bagian karena tidak muat :D
Spoiler for from master web id:
Kuasai Regex Hari Ini jg!
Steven Haryanto
Bagian: 1�Pengenalan dan Karakter Meta Sederhana
Tingkat: Dasar
Tujuan: Setelah membaca bagian pertama ini, pembaca diharapkan
memahami beberapa metakarakter regex sederhana: dot, set karakter, lternasi, jangkar, shortcut quantifier +, *, ?, serta pengelompokan.
Abstrak: Apa itu regular expression (regex), mengapa regex perlu, beberapa contoh awal.
Prasyarat: Kenal dgn salah satu bahasa pemrograman Perl, PHP, atau Python. Ini tdk wajib, tapi akan membantu dlm memahami contoh-contoh.
Kuis berhadiah BMW portal Astaganaga.com hari ini ditutup dan akan diundi dua minggu lagi. Ternyata jumlah formulir yg disubmit mencapai lebih dari 40 ribu!
Sukses
besar. Kebetulan, karena Anda seorang programer PHP yg telah mengerti tentang SQL dan RDBMS (meskipun hanya MySQL), data tiap
formulir online sudah masuk semua dgn rapi ke database. dgn bangga Anda membuka browser dan mengakses URL phpMyAdmin dan
bermaksud melihat-lihat data yg telah terkumpul.
Nama propinsi kebetulan seragam semua, karena Anda telah membuat field isian berupa kotak select, sehingga pengisi formulir tinggal memilih dari daftar propinsi yg disediakan. Tapi, wah, ternyata nama kota cukup bervariasi karena di formulir berupa kotak isian. Banyak sekali terjadi salah ketik: �Jakrta�, �Seamrng.� Ada yg menulis dgn singkatan �DKI� atau �Bdg.� Ada pula yg berbaik hati menuliskan lengkapnya, �Jakarta Barat� atau malah �Kotamadya Bogor.� Dan ternyata Anda lupa melakukan pengecekan kode pos, sehingga ada sebagian yg salah, atau mungkin iseng, mengisi dgn huruf �tidak ada� atau �-� atau deretan huruf tertentu. Belum lagi alamat
jalan, bervariasi sekali.
Repotnya, sang bos ternyata meminta data ini dirapikan sebaik-baiknya, karena akan disusun menjadi database alamat yg mungkin bisa berguna di kemudian hari. Untuk mengirim penawaran via pos�alias junk mail�misalnya, atau malah daftar ini untuk dijual ke perusahaan lain. Dan karena Anda yg menyusun databasenya, Anda pulalah yg ketiban tugas merapikannya.
Bos jg minta penulisan alamat sestandar mungkin. Semua dijadikan huruf besar. prefiks �Jalan� harus disingkat menjadi �Jl.� Gang menjadi Gg. Dan sudah pasti nama-nama kota harus dibetulkan. Salah Anda sendiri sebetulnya, kenapa tdk menyediakan daftar kota dari database. Tapi kesalahan selalu bisa terjadi toh.
Solusi Non-Regex
Oke, tugas pertama mengkonversi ke huruf kapital cukup
mudah. Anda programer PHP, jadi Anda tinggal menggunakan fungsi builtin strupper().
PHP Code:
# Langkah 1
$alamat=strupper($alamat);
Sampai
di sini alamat telah berubah menjadi string berhuruf besar semua. Hei, sebentar dulu. Ternyata ada alamat yg diawali spasi. Berarti, Anda perlu menghilangkan
dulu semua spasi di awal. Untungnya di PHP tersedia fungsi ltrim().
PHP Code:
# Langkah 0
$alamat=ltrim($alamat);
Wah,
ternyata Anda menyadari banyak jg yg mengetik spasi ganda bahkan tiga empat kali. Kok bisa ya? Bagaimana cara membetulkannya?
PHP Code:
# Langkah 0.2
while (1) {
$alamat2=str_replace(" ", " ", $alamat);
if ($alamat2 == $alamat)
break;
else
$alamat=$alamat2;
}
Kode
di atas mengubah string ganda (dua buah spasi) menjadi satu spasi terus-menerus
hingga sudah tdk ada lagi string ganda.
Tugas
berikutnya menyingkat Jalan dan Gang. Sekali lagi, karena Anda programer PHP,
Anda tinggal menggunakan fungsi string yg telah disediakan, str_replace().
PHP Code:
# Langkah 2.1
$alamat=str_replace("JALAN", "JL.", $alamat);
Mudah
ya? Satu lagi:
PHP Code:
# Langkah 2.2
$alamat=str_replace("GANG", "GG.", $alamat);
Hm, tapi ternyata ada jalan di Jakarta bernama
Ganggeng. Seorang Ibu Anwar misalnya, tinggal di
�Jalan Ganggeng 15.� Tentu saja tdk boleh diubah
menjadi Gg.geng bukan? Bagaimana solusinya? Kita hanya boleh mengubah �Gang� yg berada di awal string.
Untuk mengetahui posisi string dlm string lain, gunakan fungsi strpos(). Jika fungsi ini
mengembalikan nilai 0, maka string yg dicari ada di awal.
PHP Code:
# Langkah 2.2b
if (strpos($alamat, "GANG") === 0) {
$alamat=GG." . substr($alamat, 4);
}
Ternyata
belum benar. Ada seorang Bapak yg beralamat di �Jalan Kehakiman, Gang Haji Umar
no. 14.� Uji yg tepat sebetulnya adalah mencari kata
�Gang� yg berdiri sendiri, bukan bagian dari sebuah kata. Bagaimana caranya?
PHP Code:
# Langkah 2.2c
$ALFABET="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$ganti=false;
if (($pos=strpos($alamat, "GANG")) !== false) {
# kata "GANG" berdiri sendiri jika terdapat di awal atau di akhir
# string, atau dicabeinsi spasi atau tanda baca.
if ((($pos == 0) or
(strpos($ALFABET, substr($alamat, $pos-1, 1)) === false))
and
(($pos + 4 == strlen($alamat)) or
(strpos($ALFABET, substr($alamat, $pos+4, 1)) === false))
) $ganti=true;
}
if ($ganti)
$alamat=substr($alamat, 0, $pos) . "GG." .
substr($alamat, $pos+4);
Kode
di atas pertama-tama mencari potongan �GANG�. Jika ditemukan, maka dilakukan
pengujian sekali lagi apakah satu karakter di kiri dan di kanan �GANG� bukan
sebuah huruf. Jika benar, maka barulah dilakukan penggantian.
Ternyata
derita Anda belum berakhir sampai di sini. Entah mengapa, banyak sekali yg
mengeja �Gang� dgn �Gank� dan �Geng�. Terpaksa menambahkan potongan-potongan kode lagi ke kondisi pengujian sebelumnya. Belum lagi Anda masih harus membetulkan nama kota dan kode pos. Semakin banyak saja Anda harus memotong-motong dan menggabungkan
string, mencari string di string lain, melakukan loop, pengujian, dsb. Duh,
merepotkan! Lama-lama Anda jadi mempertimbangkan untuk
mengedit langsung saja semua data tersebut secara manual.
Contoh kasus di atas hanyalah secuil dari tugas mengolah teks.
Tugas lainnya kadang jauh lebih kompleks. Mengerikan. Apakah mengolah teks
harus bertele-tele dan merepotkan seperti contoh di atas?
Kenalkan,
Regex
Jawabnya,
untung saja, tdk. Ada sebuah bahasa mini yg disebut regular expression (regex) yg akan Anda pelajari sesaat lagi. Regex adalah sebuah fasilitas yg
ampuh, yg memungkinkan Anda mengolah teks secara jauh lebih ringkas, tdk
bertele-tele. Tanpa regex, rasanya pengolahan teks tingkat lanjut itu tdk terbayangkan repotnya. Bahkan, jika Anda buta regex, maka kemampuan mengolah teks Anda akan terus berada di tingkat taman kanak-kanak. dgn menguasai regex, Anda akan memandang teks dlm kacamata yg baru. Anda akan lebih lihai dan lancar dlm memainkan huruf dan angka,
potongan dan kata, baris dan paragraf teks. Anda tdk akan
takut lagi menghadapi data yg menyimpang atau aneh-aneh. Anda akan terlatih menemukan pola dari ketidakteraturan. Pendek
kata, sekali mengenal regex�bolehlah penulis sedikit berlebihan di sini�hidup
Anda tdk akan sama lagi!
Pengetahuan regex jg amat berguna, karena dipakai di mana-mana.
Bukan hanya di Perl, yg amat intensif menggunakan regex, tapi jg di bahasa
pemrograman lain mulai dari Python hingga Java, dari Javascript hingga VB.
Bukan hanya di Unix dgn utilitas-utilitas grep dan awk-nya, tapi jg di
Windows dan OS lain dlm berbagai program. Misalnya akan Anda jumpai di editor
teks (seperti vi dan joe), di file konfigurasi berbagai daemon dan utilitas
(seperti procmail, exim, dan Apache), bahkan di aplikasi seperti Microsoft Word
dan Borland Delphi regex pun tak luput dikenali. Intinya, pengetahuan regex
Anda akan sangat portabel dan terpakai.
Tertarik?
Tentu. Jadi mari kita lanjutkan.
Referensi:
http://en.wikipedia.org/wiki/Regular_expression
http://www.regular-expressions.info/
http://chimpy.wordpress.com/2009/06/...ex-cheatsheet/ (http://chimpy.wordpress.com/2009/06/10/regex-cheatsheet/)
http://www.webcheatsheet.com/php/reg...xpressions.php (http://www.webcheatsheet.com/php/regular_expressions.php)
http://articles.sitepoint.com/articl...pressions-php# (http://articles.sitepoint.com/article/regular-expressions-php#)
</div>
Sebelumnya, newbie minta sori jika thread serupa sudah pernah ada...
emang sih sudah pernah ada, http://www.kaskus.us/search_result.php?q=regex
namun alangkah baiknya jika dibuat thread resmi aja.. :D
supaya segala permasalahan tentang regex bisa dibahas di sini dan supaya mudah mencari nya....
Intro dari Saya:
ReGex (atau dikenal dengan regexp), kependekan dari Regular Expression adalah sekumpulan teks yang disusun sedemikian rupa berbentuk suatu pola, yang berguna untuk melakukan pencarian terhadap suatu string yang cocok dengan pola tersebut...
Regex sangat lumrah digunakan dalam berbagai bahasa pemrograman untuk memproses atau mencari teks/string dalam jumlah banyak dan atau dengan format tertentu tanpa harus mencari string satu per satu...
Misalnya untuk mencari format email, alamat URL, nomor telepon, dll lebih banyak lagi.
Adalah banyak sekali tutorial Regex di belantara Internet ini, namun masih saja kita kadang bingung dibuatnya. Kenapa? karena memang regex ini tidaklah mudah untuk dimengerti (paling tidak menurut saya)...
Oleh karena itu saya buat thread ini supaya para master2 programmer yang pada turun gunung sudi kira nya berbagi ilmu kanuragannya disini... :D
Regex digunakan oleh banyak sekali bahasa pemrograman, diantaranya
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
REALbasic
Ruby
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
XQuery & XPath
Sedikit Tutorial Tentang Regex
Tutorial berikut saya copas dari www.master.web.id (http://www.master.web.id/mwmag/issue/01/content/tutorial-regex-1/tutorial-regex-1.html) karangan mas Steven Haryanto ,saya pecah jadi 2 bagian karena tidak muat :D
Spoiler for from master web id:
Kuasai Regex Hari Ini jg!
Steven Haryanto
Bagian: 1�Pengenalan dan Karakter Meta Sederhana
Tingkat: Dasar
Tujuan: Setelah membaca bagian pertama ini, pembaca diharapkan
memahami beberapa metakarakter regex sederhana: dot, set karakter, lternasi, jangkar, shortcut quantifier +, *, ?, serta pengelompokan.
Abstrak: Apa itu regular expression (regex), mengapa regex perlu, beberapa contoh awal.
Prasyarat: Kenal dgn salah satu bahasa pemrograman Perl, PHP, atau Python. Ini tdk wajib, tapi akan membantu dlm memahami contoh-contoh.
Kuis berhadiah BMW portal Astaganaga.com hari ini ditutup dan akan diundi dua minggu lagi. Ternyata jumlah formulir yg disubmit mencapai lebih dari 40 ribu!
Sukses
besar. Kebetulan, karena Anda seorang programer PHP yg telah mengerti tentang SQL dan RDBMS (meskipun hanya MySQL), data tiap
formulir online sudah masuk semua dgn rapi ke database. dgn bangga Anda membuka browser dan mengakses URL phpMyAdmin dan
bermaksud melihat-lihat data yg telah terkumpul.
Nama propinsi kebetulan seragam semua, karena Anda telah membuat field isian berupa kotak select, sehingga pengisi formulir tinggal memilih dari daftar propinsi yg disediakan. Tapi, wah, ternyata nama kota cukup bervariasi karena di formulir berupa kotak isian. Banyak sekali terjadi salah ketik: �Jakrta�, �Seamrng.� Ada yg menulis dgn singkatan �DKI� atau �Bdg.� Ada pula yg berbaik hati menuliskan lengkapnya, �Jakarta Barat� atau malah �Kotamadya Bogor.� Dan ternyata Anda lupa melakukan pengecekan kode pos, sehingga ada sebagian yg salah, atau mungkin iseng, mengisi dgn huruf �tidak ada� atau �-� atau deretan huruf tertentu. Belum lagi alamat
jalan, bervariasi sekali.
Repotnya, sang bos ternyata meminta data ini dirapikan sebaik-baiknya, karena akan disusun menjadi database alamat yg mungkin bisa berguna di kemudian hari. Untuk mengirim penawaran via pos�alias junk mail�misalnya, atau malah daftar ini untuk dijual ke perusahaan lain. Dan karena Anda yg menyusun databasenya, Anda pulalah yg ketiban tugas merapikannya.
Bos jg minta penulisan alamat sestandar mungkin. Semua dijadikan huruf besar. prefiks �Jalan� harus disingkat menjadi �Jl.� Gang menjadi Gg. Dan sudah pasti nama-nama kota harus dibetulkan. Salah Anda sendiri sebetulnya, kenapa tdk menyediakan daftar kota dari database. Tapi kesalahan selalu bisa terjadi toh.
Solusi Non-Regex
Oke, tugas pertama mengkonversi ke huruf kapital cukup
mudah. Anda programer PHP, jadi Anda tinggal menggunakan fungsi builtin strupper().
PHP Code:
# Langkah 1
$alamat=strupper($alamat);
Sampai
di sini alamat telah berubah menjadi string berhuruf besar semua. Hei, sebentar dulu. Ternyata ada alamat yg diawali spasi. Berarti, Anda perlu menghilangkan
dulu semua spasi di awal. Untungnya di PHP tersedia fungsi ltrim().
PHP Code:
# Langkah 0
$alamat=ltrim($alamat);
Wah,
ternyata Anda menyadari banyak jg yg mengetik spasi ganda bahkan tiga empat kali. Kok bisa ya? Bagaimana cara membetulkannya?
PHP Code:
# Langkah 0.2
while (1) {
$alamat2=str_replace(" ", " ", $alamat);
if ($alamat2 == $alamat)
break;
else
$alamat=$alamat2;
}
Kode
di atas mengubah string ganda (dua buah spasi) menjadi satu spasi terus-menerus
hingga sudah tdk ada lagi string ganda.
Tugas
berikutnya menyingkat Jalan dan Gang. Sekali lagi, karena Anda programer PHP,
Anda tinggal menggunakan fungsi string yg telah disediakan, str_replace().
PHP Code:
# Langkah 2.1
$alamat=str_replace("JALAN", "JL.", $alamat);
Mudah
ya? Satu lagi:
PHP Code:
# Langkah 2.2
$alamat=str_replace("GANG", "GG.", $alamat);
Hm, tapi ternyata ada jalan di Jakarta bernama
Ganggeng. Seorang Ibu Anwar misalnya, tinggal di
�Jalan Ganggeng 15.� Tentu saja tdk boleh diubah
menjadi Gg.geng bukan? Bagaimana solusinya? Kita hanya boleh mengubah �Gang� yg berada di awal string.
Untuk mengetahui posisi string dlm string lain, gunakan fungsi strpos(). Jika fungsi ini
mengembalikan nilai 0, maka string yg dicari ada di awal.
PHP Code:
# Langkah 2.2b
if (strpos($alamat, "GANG") === 0) {
$alamat=GG." . substr($alamat, 4);
}
Ternyata
belum benar. Ada seorang Bapak yg beralamat di �Jalan Kehakiman, Gang Haji Umar
no. 14.� Uji yg tepat sebetulnya adalah mencari kata
�Gang� yg berdiri sendiri, bukan bagian dari sebuah kata. Bagaimana caranya?
PHP Code:
# Langkah 2.2c
$ALFABET="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$ganti=false;
if (($pos=strpos($alamat, "GANG")) !== false) {
# kata "GANG" berdiri sendiri jika terdapat di awal atau di akhir
# string, atau dicabeinsi spasi atau tanda baca.
if ((($pos == 0) or
(strpos($ALFABET, substr($alamat, $pos-1, 1)) === false))
and
(($pos + 4 == strlen($alamat)) or
(strpos($ALFABET, substr($alamat, $pos+4, 1)) === false))
) $ganti=true;
}
if ($ganti)
$alamat=substr($alamat, 0, $pos) . "GG." .
substr($alamat, $pos+4);
Kode
di atas pertama-tama mencari potongan �GANG�. Jika ditemukan, maka dilakukan
pengujian sekali lagi apakah satu karakter di kiri dan di kanan �GANG� bukan
sebuah huruf. Jika benar, maka barulah dilakukan penggantian.
Ternyata
derita Anda belum berakhir sampai di sini. Entah mengapa, banyak sekali yg
mengeja �Gang� dgn �Gank� dan �Geng�. Terpaksa menambahkan potongan-potongan kode lagi ke kondisi pengujian sebelumnya. Belum lagi Anda masih harus membetulkan nama kota dan kode pos. Semakin banyak saja Anda harus memotong-motong dan menggabungkan
string, mencari string di string lain, melakukan loop, pengujian, dsb. Duh,
merepotkan! Lama-lama Anda jadi mempertimbangkan untuk
mengedit langsung saja semua data tersebut secara manual.
Contoh kasus di atas hanyalah secuil dari tugas mengolah teks.
Tugas lainnya kadang jauh lebih kompleks. Mengerikan. Apakah mengolah teks
harus bertele-tele dan merepotkan seperti contoh di atas?
Kenalkan,
Regex
Jawabnya,
untung saja, tdk. Ada sebuah bahasa mini yg disebut regular expression (regex) yg akan Anda pelajari sesaat lagi. Regex adalah sebuah fasilitas yg
ampuh, yg memungkinkan Anda mengolah teks secara jauh lebih ringkas, tdk
bertele-tele. Tanpa regex, rasanya pengolahan teks tingkat lanjut itu tdk terbayangkan repotnya. Bahkan, jika Anda buta regex, maka kemampuan mengolah teks Anda akan terus berada di tingkat taman kanak-kanak. dgn menguasai regex, Anda akan memandang teks dlm kacamata yg baru. Anda akan lebih lihai dan lancar dlm memainkan huruf dan angka,
potongan dan kata, baris dan paragraf teks. Anda tdk akan
takut lagi menghadapi data yg menyimpang atau aneh-aneh. Anda akan terlatih menemukan pola dari ketidakteraturan. Pendek
kata, sekali mengenal regex�bolehlah penulis sedikit berlebihan di sini�hidup
Anda tdk akan sama lagi!
Pengetahuan regex jg amat berguna, karena dipakai di mana-mana.
Bukan hanya di Perl, yg amat intensif menggunakan regex, tapi jg di bahasa
pemrograman lain mulai dari Python hingga Java, dari Javascript hingga VB.
Bukan hanya di Unix dgn utilitas-utilitas grep dan awk-nya, tapi jg di
Windows dan OS lain dlm berbagai program. Misalnya akan Anda jumpai di editor
teks (seperti vi dan joe), di file konfigurasi berbagai daemon dan utilitas
(seperti procmail, exim, dan Apache), bahkan di aplikasi seperti Microsoft Word
dan Borland Delphi regex pun tak luput dikenali. Intinya, pengetahuan regex
Anda akan sangat portabel dan terpakai.
Tertarik?
Tentu. Jadi mari kita lanjutkan.
Referensi:
http://en.wikipedia.org/wiki/Regular_expression
http://www.regular-expressions.info/
http://chimpy.wordpress.com/2009/06/...ex-cheatsheet/ (http://chimpy.wordpress.com/2009/06/10/regex-cheatsheet/)
http://www.webcheatsheet.com/php/reg...xpressions.php (http://www.webcheatsheet.com/php/regular_expressions.php)
http://articles.sitepoint.com/articl...pressions-php# (http://articles.sitepoint.com/article/regular-expressions-php#)
</div>