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, alternasi,
jangkar, shortcut quantifier +, *, ?,
serta pengelompokan.
Abstrak: Apa itu regular
expression (regex), mengapa regex perlu, beberapa contoh awal.
Prasyarat: Kenal dengan salah satu bahasa pemrograman
Perl, PHP, atau Python. Ini tidak wajib, tapi akan
membantu dalam memahami contoh-contoh.
Kuis berhadiah BMW portal Astaganaga.com hari ini
ditutup dan akan diundi dua minggu lagi. Ternyata
jumlah formulir yang disubmit mencapai lebih dari 40 ribu! Sukses
besar. Kebetulan, karena Anda seorang programer PHP
yang telah mengerti tentang SQL dan RDBMS (meskipun hanya MySQL), data tiap
formulir online sudah masuk semua dengan rapi ke database. Dengan bangga Anda membuka browser dan mengakses URL phpMyAdmin dan
bermaksud melihat-lihat data yang telah terkumpul.
Nama propinsi kebetulan seragam semua, karena Anda telah
membuat field isian berupa kotak select, sehingga
pengisi formulir tinggal memilih dari daftar propinsi yang disediakan. Tapi,
wah, ternyata nama kota
cukup bervariasi karena di formulir berupa kotak isian. Banyak sekali terjadi
salah ketik: “Jakrta”, “Seamrng.” Ada yang menulis dengan singkatan “DKI” atau “Bdg.” Ada pula yang
berbaik hati menuliskan lengkapnya, “Jakarta Barat” atau malah “Kotamadya
Bogor.” Dan ternyata Anda lupa melakukan pengecekan kode pos, sehingga
ada sebagian yang salah, atau mungkin iseng, mengisi dengan 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
yang 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 yang menyusun databasenya, Anda pulalah yang ketiban
tugas merapikannya.
Bos juga 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 tidak 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().
# Langkah 1 $alamat = strupper($alamat);
Sampai
di sini alamat telah berubah menjadi string berhuruf besar semua. Hei, sebentar
dulu. Ternyata ada alamat yang diawali spasi. Berarti, Anda perlu menghilangkan
dulu semua spasi di awal. Untungnya di PHP tersedia fungsi ltrim().
# Langkah 0 $alamat = ltrim($alamat);
Wah,
ternyata Anda menyadari banyak juga yang mengetik spasi ganda bahkan tiga empat
kali. Kok bisa ya? Bagaimana cara membetulkannya?
# 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 tidak ada lagi string ganda.
Tugas
berikutnya menyingkat Jalan dan Gang. Sekali lagi, karena Anda programer PHP,
Anda tinggal menggunakan fungsi string yang telah disediakan, str_replace().
# Langkah 2.1 $alamat = str_replace("JALAN", "JL.", $alamat);
Mudah
ya? Satu lagi:
# 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 tidak boleh diubah
menjadi Gg.geng bukan? Bagaimana solusinya? Kita hanya boleh mengubah “Gang” yang berada di awal string.
Untuk mengetahui posisi string dalam string lain, gunakan fungsi strpos(). Jika fungsi ini
mengembalikan nilai 0, maka string yang dicari ada di awal.
# Langkah 2.2b if (strpos($alamat, "GANG") === 0) { $alamat = "GG." . substr($alamat, 4); }
Ternyata
belum benar. Ada seorang Bapak yang beralamat di “Jalan Kehakiman, Gang Haji Umar
no. 14.” Uji yang tepat sebetulnya adalah mencari kata
“Gang” yang berdiri sendiri, bukan bagian dari sebuah kata. Bagaimana caranya?
# 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 dibatasi 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 yang
mengeja “Gang” dengan “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, tidak. Ada sebuah
bahasa mini yang disebut regular expression (regex) yang akan
Anda pelajari sesaat lagi. Regex adalah sebuah fasilitas yang
ampuh, yang memungkinkan Anda mengolah teks secara jauh lebih ringkas, tidak
bertele-tele. Tanpa regex, rasanya pengolahan teks
tingkat lanjut itu tidak terbayangkan repotnya. Bahkan, jika Anda buta
regex, maka kemampuan mengolah teks Anda akan terus
berada di tingkat taman kanak-kanak. Dengan menguasai regex, Anda akan memandang teks dalam kacamata yang baru. Anda akan lebih lihai dan lancar dalam memainkan huruf dan angka,
potongan dan kata, baris dan paragraf teks. Anda tidak akan
takut lagi menghadapi data yang menyimpang atau aneh-aneh. Anda akan terlatih menemukan pola dari ketidakteraturan. Pendek
kata, sekali mengenal regex—bolehlah penulis sedikit berlebihan di sini—hidup
Anda tidak akan sama lagi!
Pengetahuan regex juga amat berguna, karena dipakai di mana-mana.
Bukan hanya di Perl, yang amat intensif menggunakan regex, tapi juga di bahasa
pemrograman lain mulai dari Python hingga Java, dari Javascript hingga VB.
Bukan hanya di Unix dengan utilitas-utilitas grep dan awk-nya, tapi juga di
Windows dan OS lain dalam 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.
Wildcard
Anda
yang pernah memakai DOS atau Linux tentunya familiar dengan wildcard—atau
globbing jika di Unix. Wildcard adalah sebuah string pola yang dapat digunakan
untuk dicocokkan dengan sekumpulan nama file dan direktori. Misalnya: *.exe akan cocok dengan semua file
berekstensi .exe. Karakter
khusus wildcard ‘*’ di sini
berarti cocok dengan deretan satu atau lebih karakter apa saja. Contoh lain, ???.txt akan cocok dengan tiap file .txt yang namanya terdiri dari tiga huruf.
Latihan 1
Jawaban
ada di akhir tulisan.
- Apa wildcard dari “semua nama file berekstensi apa saja”?
- Apa wildcard dari “Semua file ZIP yang berawalan A, B, dan C”?
- Apakah akan F*.* cocok dengan nama file FileSaya di DOS/Linux? Bagaimana dengan f*?
Wildcard
bisa dibilang bentuk primitif mirip regex. Namun regex jauh lebih ampuh dan
ekspresif daripada wildcard, dapat menyatakan pola-pola yang lebih kompleks.
Pemilihan, Pengelompokan, Set, dan Opsional
Sama
seperti wildcard, regex pun adalah sebuah string pola. Pola yang akan
dicocokkan oleh komputer dari kiri ke kanan. Pola regex “satu” misalnya, cocok
dengan string “satu” dan tidak dengan string “dua”. Tidak ada bedanya dengan
operasi pembandingan string biasa bukan?
Beberapa
karakter dalam sebuah pola regex akan diartikan secara khusus.
Karakter-karakter ini disebut karakter meta (alias, bukan yang
sesungguhnya). Ini sama seperti karakter *
dan ? di wildcard yang bukan
diartikan sebagai karakter literal bintang dan tanda tanya itu sendiri,
melainkan berarti khusus. Demikian juga karakter-karakter meta.
Jika
wildcard di DOS hanya mengenal dua karakter meta, ? dan *, dan
itu pun tidak fleksibel, maka dalam bahasa regex standar umumnya dikenal
beberapa jenis karakter meta lain. Berikut ini beberapa karakter meta dasar.
- | (garis vertikal) untuk pemilihan;
- ( dan ) (kurung buka dan kurung tutup) untuk pengelompokan;
- [ dan ] (kurung siku buka dan tutup) untuk membuat set karakter;
- ? (tanda tanya) untuk mengartikan opsional.
Kasus 2: Berbagai Cara Mengeja Nama
Punya
nama yang, ehem, keren belum tentu sepenuhnya berkah. Banyak juga yang salah
mengeja nama saya. “Steven” kadang-kadang ditulis orang “stephen”, kadang juga
“stefen”—meski lebih jarang. Bagaimana mencari semua kemungkinan orang menulis
nama itu?
if (strpos($nama, "steven") !== false or strpos($nama, "stephen") !== false or strpos($nama, "stefen") !== false) { # lakukan sesuatu di sini }
Tapi,
ada juga ternyata yang menulis “stefan”. Jika kita kombinasikan semua
kemungkinan, maka kini ada 3×2 variasi. Lalu pernah juga ada dokter yang
menulis nama saya “stefanus” atau “stevanus” di kartu pasiennya. Nama belakang
“haryanto” saya pun pernah ditulis “harijanto”, “hariyanto”, atau “herjanto”.
Berarti ada puluhan kombinasi sekarang. Apakah kita harus terus-menerus
memperpanjang perbandingan dengan sekian belas fungsi strpos() dan operator or? Tentu tidak, kan sudah ada regex.
ste(v|f|ph)[ea]n(us)? h[ae]ri?[jy]anto
Wuih,
tunggu dulu. Regex seperti itu? Mengerikan juga. Tenanglah. Regex itu harus
dipandang sebagai teman. Notasinya memang ringkas sekali, tapi keringkasan
justru menjadi salah satu keunggulan regex. Jika mata Anda sudah terbiasa,
semoga akan bisa lebih cepat dan mudah memahami sebuah pola regex. Pola di atas
tadi terdiri dari beberapa karakter meta. Kita bahas satu-persatu.
Pemilihan
|
disebut juga alternasi atau pemilihan. Dapat dibaca sebagai “atau”. Gunanya
untuk memilih satu dari dua atau lebih alternatif yang kita sediakan. Beberapa
contoh:
- aku|kamu, cocok dengan aku atau kamu, tapi tidak dengan dia;
- apel|anggur|pisang, cocok dengan salah satu dari apel, anggur, atau pisang, tapi tidak dengan jambu karena itu tidak ada dalam daftar pilihan.
Pengelompokan
( dan )
berguna untuk mengelompokkan, persis seperti tanda kurung dalam operasi
matematika. Umumnya dipakai bersama karakter meta lain. Contoh:
- satria (baja hitam|pembela kebenaran) akan cocok dengan “satria baja hitam” atau “satria pembela kebenaran”. Regex ini berbunyi sebagai berikut: “deretan huruf ‘satria’ diikuti spasi dan diikuti ‘baja hitam’ atau ‘pembela kebenaran’.
Set karakter
[ dan ]
mengapit sebuah set karakter. Pada dasarnya berguna untuk memberi pilihan juga,
sama seperti |, namun memiliki
perbedaan pilihannya berupa huruf dan memiliki sintaks rentang dan negasi.
Sintaks rentang adalah [m-n] dan
akan cocok dengan karakter mulai dari m hingga n. Sintaks negasi
adalah [^m] dan akan cocok
dengan semua karakter kecuali m. Berikut beberapa contoh set.
- bat[aoiu]k, cocok dengan batak, batok, batik, atau batuk.
- bat(a|i|o|u)k, sama dengan sebelumnya, namun menggunakan |.
- [0-9], cocok dengan angka 0 hingga 9.
- [A-EG-Z], cocok dengan semua huruf besar kecuali F.
- [0-9][0-9], cocok dengan `00’ hingga ‘99’ (100 kombinasi).
- [012][0-9], cocok dengan ‘00’ hingga ‘29’ (30 kombinasi)
- [012][0-9]|30, cocok dengan ‘00’ hingga ‘29’ atau ‘30’ (30 plus 1 kombinasi)
- sem([ui]|bilan), cocok dengan semi, semu, atau sembilan. Tidak cocok dengan semibilan, semubilan, maupun semuibilan.
Opsional
Arti
? di regex berbeda dengan di
wildcard. Di regex, ? berarti
huruf atau kelompok di kiri bersifat opsional. Dapat juga dibaca sebagai “boleh
ada atau boleh tidak.” Beberapa contoh:
- silah?kan, cocok dengan silakan atau silahkan.
- (silah)?kan, cocok dengan silahkan atau dengan kan saja.
- advi([sc]es?|sory), cocok dengan advice, advise, advices, advises, atau advisory. Regex ini berbunyi “empat huruf advi diikuti dengan salah satu dari: a) huruf s atau c yang diikuti e dan boleh diikuti s; atau b) deretan huruf sory.”
Jadi
kembali ke kasus variasi ejaan nama, regex kita berbunyi demikian: “Tiga huruf ste
diikuti salah satu dari v, f, atau ph; diikuti salah satu dari e atau a;
diikuti huruf n; boleh diikuti ‘us’, tapi boleh juga tidak. Diikuti
spasi dan deret tiga huruf har; boleh diikuti huruf i, dapat juga
langsung diikuti salah satu dari huruf j atau y. Terakhir, diikuti oleh deret
empat huruf anto.” Karena ringkas, seluruh kalimat keinginan kita tadi
dapat dinyatakan hanya dengan satu pola regex! Dengan regex, kita dapat
mempersingkat mungkin puluhan baris if-or menjadi hanya satu baris kode PHP:
if (preg_match("/ste(v|f|ph)[ea]n(us)? h[ae]ri?[jy]anto/", $nama)) { # lakukan sesuatu di sini }
Pada
dasarnya regex bisa menyingkat 100 atau lebih baris kode menjadi hanya satu
pola. Singkat berarti lebih cepat ditulis, lebih mudah dikopi-paste, lebih
sedikit kemungkinan salah. Regex juga lebih gampang dibuat ketimbang kode yang
sepadan.
Perhatikan
bahwa pola regex kita dalam kode PHP di atas diapit oleh dua garis miring.
Kegunaan pengapit ini dan lebih jauh mengenai fungsi preg_match() akan dibahas nanti. Dalam
Perl, sintaksnya seperti ini:
if ($nama =~ /ste(v|f|ph)[ea]n(us)? h[ae]ri?[jy]anto/) { # lakukan sesuatu di sini }
Karena
regex begitu terintegrasi dengan Perl, maka Perl memiliki beberapa operator
khusus untuk regex. Pengapit //
disebut operator m//. Terdapat
pula satu operator pengutip literal regex lain yaitu qr//. Pola regex dalam Perl tidak perlu
diapit lagi dengan kutip string, cukup dengan salah satu pengutip regex tadi (m// atau qr//).
Untuk melakukan perbandingan regex, digunakan operator =~.
Sementara
di PHP pekerjaan yang berkaitan dengan regex dilakukan melalui fungsi-fungsi preg_*().
Latihan 2
- Seperti apa regex yang berbunyi “satu hingga tiga deret karakter a baik huruf besar maupun kecil”?
- Bagaimana mencocokkan karakter yang bukan huruf kecil?
- Bagaimana mencocokkan string angka ‘15’ hingga ‘51’ dengan regex?
- Bagaimana mencocokkan dengan tepat string-string anting, ranting, dan ranjang dengan seringkas-ringkasnya?
- Apakah [AS][US][AS] cocok dengan USA?
- Apakah (Mega|Rahma)wati cocok dengan Ibu Megawati? Dengan Mega?
- Apakah Saya( bukan)? pembohong. cocok dengan saya pembohong.?
Titik, Nol-Atau-Lebih, Satu-Atau-Lebih, Jangkar
Berikut
ini empat lagi karakter meta dasar lain.
- . (titik) cocok dengan satu karakter apa pun;
- (bintang) untuk mengartikan “nol atau lebih”;
- + (plus) untuk mengartikan “satu atau lebih”;
- ^ (tanda pangkat) dan $ (dolar) untuk penjangkaran.
Titik
Titik
atau dot adalah lambang yang cocok dengan semua karakter tunggal. Beberapa
contoh:
- bat.k cocok dengan batak, batok, dan juga batbk, bat+k, bat8k, dsb. Namun tidak cocok dengan batrak (karena tr adalah dua karakter) atau batk (nol karakter).
- bat.?k sama seperti sebelumnya, namun cocok pula dengan batk (nol karakter) karena titik diikuti oleh tanda opsional.
- b...k cocok dengan lebih banyak lagi string, mulai dari batak, buruk, bilik, dan semua potongan string yang terdiri dari 5 karakter, diawali dengan b dan diakhiri dengan k.
Nol-Atau-Lebih, Satu-Atau-Lebih
Kalau
tanda optional ? bisa dibilang
sebagai “nol-atau-satu”, maka *
melambangkan “nol-atau-lebih” dan +
melambangkan “satu-atau-lebih” dari karakter atau kelompok yang berada tepat di
kiri tanda tersebut. Beberapa contoh:
- [0-9]+, cocok dengan deretan angka.
- .+, cocok dengan satu atau lebih karakter apa pun, atau cocok dengan string yang “tidak kosong”.
- .*, cocok dengan nol atau lebih karakter apa pun, atau cocok dengan string apa saja, termasuk juga yang kosong.
- h?(ah|eh)+!*, berbunyi “boleh diawali huruf h, terdiri dari deretan ah atau eh, dan boleh diakhiri dengan deretan tanda seru.” Cocok dengan string seperti eh, hahahah!, atau ehehahehah!!!. Tidak cocok dengan string seperti haha, hhah!, maupun h!.
Jangkar
^ dan $
masing-masing dapat disebut sebagai “harus di awal” dan “harus di akhir.”
Mengapa disebut jangkar? Kedua karakter ini tidak melambangkan karakter mereka
sendiri, ingat, keduanya adalah karakter meta. Bahkan ^ dan $
di sini tidak melambangkan karakter apapun, melainkan mensyaratkan posisi
atau penambatan pola ke string yang ingin dicocokkan. Itulah sebabnya
pasangan karakter meta ini disebut anchor, atau jangkar. Beberapa contoh:
- 456 cocok dengan 456, 456789, maupun 123456 karena ketiganya mengandung pola tersebut.
- ^456 cocok dengan 456, 456789, namun tidak cocok dengan 123456.
- ^456$ hanya cocok dengan 456, tidak dengan 456789 maupun 123456.
Pola
seperti [0-9][0-9] dan pola-pola
lain di contoh sebelumnya bersifat tidak terjangkar karena tidak diberi ^ maupun $.
Jadi di mana pun pola tersebut ditemukan di dalam string—di awal, tengah,
maupun ujung akhir—tetap akan cocok. Sementara jika sebuah pola terjangkar,
maka hanya cocok di awal atau di akhir atau awal-dan-akhir, bergantung pada
jenis jangkar yang diberikan pada pola.
Latihan 3
- Bagaimana pola sebuah bilangan bulat positif? Bulat negatif? Desimal positif/negatif?
- Bagaimana regex yang berbunyi “mengandung string aku”?
- Bagaimana regex yang berbunyi “tepat string aku”?
- Bagaimana regex yang berbunyi “diakhiri string aku”?
- Bagaimana regex untuk mencocokkan nama variabel dalam PHP atau variabel skalar Perl?
- Apakah ^(Mega|Rahma)wati cocok dengan Ibu Megawati?
- Apakah [^k]apuk cocok dengan bunga kapuk yang mulai lapuk?
Sampai
di sini dulu. Sampai jumpa di bagian berikutnya.
Jawaban Latihan
Latihan 1
- *.*
- Wildcard di Linux lebih ampuh daripada di DOS. Selain karakter khusus * dan ?, shell Linux mengenali set karakter []. Untuk menyatakan kumpulan file ZIP berawalan A, B, dan C, Anda dapat menggunakan pola [ABC]*.ZIP di Linux. Sementara di DOS Anda perlu membuat tiga wildcard terpisah: A*.ZIP, B*.ZIP, C*.ZIP.
- Pertanyaan ini sedikit menjebak. Kelakuan wildcard di Linux dan di DOS agak berbeda. Wildcard pertama, F*.* akan cocok dengan file FileSaya di DOS. Namun di Linux, wildcard ini berarti “File yang diawali huruf F dan mengandung titik di tengahnya.” Jadi jika nama file FileSaya.doc misalnya, maka wildcard akan cocok di Linux. Tapi jika tanpa ekstensi—yang berarti tanpa karakter titik—maka tidak akan cocok. Wildcard kedua pun hanya cocok di DOS. Ingat, Unix membedakan huruf besar dan kecil. Karena wildcard diawali huruf f kecil, maka tidak akan cocok di Linux.
Latihan 2
- [Aa][Aa]?[Aa]?
- [^a-z]. Catatan, ini berarti angka, simbol, maupun huruf besar cocok dengan pola ini. Karena semuanya bukan huruf kecil.
- 1[1-5]|[234][0-9]|5[01]
- r?anting|ranjang. Pola r?an(ting|jang), meskipun lebih ringkas, tidak dapat digunakan karena cocok juga dengan anjang, padahal itu tidak kita inginkan. Sementara pola ranting|anting|ranjang juga dapat digunakan, tapi tentunya itu bukan yang pola yang terpendek.
- Ya.
- (Mega|Rahma)wati cocok dengan Ibu Megawati, tapi tidak dengan Mega, karena string yang kedua tidak mengandung wati.
- Pertanyaan ini sebuah jebakan. Regex secara default membedakan huruf besar dan kecil. Karena itu Saya( bukan)? pembohong. tidak cocok dengan saya pembohong..
Latihan 3
Bilangan
bulat positif: [0-9]+.
Bulangan bulat negatif: -[0-9]+.
Sebuah bilangan positif juga dapat diberi tanda positif di depan angkanya.
Karena + adalah sebuah karakter
meta, maka kita dapat memasukkannya ke dalam set atau mengawalinya dengan \ (garis miring terbalik, backslash) untuk
membuatnya menjadi bermakna literal. Contoh: [+]?[0-9]+
atau \+?[0-9]+.
Kedua
pola di atas dapat digabung menjadi pola untuk “bilangan bulat”: [+-]?[0-9]+.
Bilangan
desimal adalah bilangan bulat yang diikuti koma desimal. Polanya adalah sebagai
berikut: [+-]?[0-9]+(,[0-9]+)?
Atau bisa juga ditulis tanpa pengelompokan dengan pola ini: [+-]?[0-9]+,?[0-9]*. Perhatikan bahwa koma
desimal bersifat opsional.
aku
^aku$
aku$
Sebuah
variabel dalam PHP diawali dengan karakter $
dan diikuti dengan huruf besar, huruf kecil, atau garis bawah (_) namun tidak boleh angka. Huruf kedua
dan seterusnya dapat berupa huruf, garis bawah, atau angka. Sebuah variabel
dapat terdiri dari satu atau lebih karakter. Polanya adalah sebagai berikut: $[A-Za-z_][A-Za-z_0-9]*
Perhatikan bahwa karakter $ di
awal pola bukanlah karakter meta. Karakter meta memiliki arti khusus hanya
dalam konteks khusus saja. Jika karakter $
tidak ditaruh di akhir pola, maka tidak berarti jangkar, melainkan karakter
literal biasa.
Tidak.
Karena pola berjangkar, maka potongan Mega atau Rahma harus
terdapat di awal string yang ingin dicocokkan. Dalam kasus ini, tidak cocok
karena awal string adalah Ibu.
Ya.
Tepatnya, cocok dengan lapuk. Sekali lagi, perhatikan karakter meta
bergantung pada konteks. Di dalam [ ]
kebanyakan karakter meta menjadi bermakna literal. Dalam kasus kita, karakter
meta ^ jika di awal pola berarti
jangkar, namun di awal set berarti negasi. Maka pola [^k]apuk bertugas mencari potongan string
yang bukan diawali huruf k kecil dan diikuti apuk. Potongan
string lapuk cocok dengan pola ini.
kasian penulis aslinya gak di sertakan di sumber :(
BalasHapushttp://www.master.web.id/mwmag/issue/01/content/tutorial-regex-1/tutorial-regex-1.html