Ceriwis  

Go Back   Ceriwis > HOBI > Komputer & Teknologi > Programming

Programming Share, tanya jawab, saling bantu antar programmer dengan berbagai macam bahasa pemrograman.

Reply
 
Thread Tools
  #1  
Old 20th November 2011
Darkc0der Darkc0der is offline
Ceriwiser
 
Join Date: Nov 2011
Posts: 598
Rep Power: 14
Darkc0der mempunyai hidup yang Normal
Default All About Regular Expression (RegEx)

Regular Expression


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..



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...



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 karangan mas Steven Haryanto ,saya pecah jadi 2 bagian karena tidak muat




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://www.webcheatsheet.com/php/reg...xpressions.php

http://articles.sitepoint.com/articl...pressions-php#



Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


 


All times are GMT +7. The time now is 05:39 AM.


no new posts