Jumat, 07 Januari 2011

Menggunakan Regular Expressions dengan PHP

Ekspresi reguler adalah alat yang ampuh untuk memeriksa dan memodifikasi teks. Ekspresi reguler sendiri, dengan pola umum notasi hampir seperti bahasa pemrograman mini, memungkinkan Anda untuk menggambarkan dan mengurai teks. Mereka memungkinkan Anda untuk mencari pola dalam string, penggalian cocok fleksibel dan tepat.Namun, yang harus dicatat bahwa karena ekspresi reguler lebih kuat, mereka juga lebih lambat dibandingkan dengan fungsi string yang lebih mendasar. Oleh karena itu Anda harus menggunakan kalimat biasa jika Anda memiliki kebutuhan tertentu.

PHP mendukung dua jenis ekspresi reguler: Regular Expressions POSIX-extended dan Perl-Compatible (PCRE). Fungsi-fungsi PCRE lebih kuat daripada yang POSIX, dan lebih cepat juga, jadi kita akan berkonsentrasi pada mereka.

Dasar-dasar:
Dalam ekspresi reguler, karakter paling cocok hanya dirinya sendiri. Misalnya, jika Anda mencari "foo" ekspresi regular dalam string "John bermain sepak bola," Anda mendapatkan pertandingan karena "foo" terjadi dalam string tersebut. Beberapa karakter memiliki arti khusus dalam ekspresi reguler. Misalnya, tanda dolar ($) digunakan untuk mencocokkan string yang berakhir dengan pola yang diberikan. Demikian pula, sebuah tanda caret (^) karakter pada awal ekspresi reguler menunjukkan bahwa ia harus cocok dengan awal string. Karakter yang cocok sendiri disebut literal. Karakter yang memiliki arti khusus disebut metakarakter.

Dot (.) mencocokkan setiap karakter tunggal kecuali newline (\). Jadi, pola h.t sesuai dengan hat, hothit, hut, h7t dll. Tanda pipa vertikal (|) metakarakter digunakan untuk alternatif dalam ekspresi reguler. Ini berperilaku seperti operator logika OR dan Anda harus menggunakannya jika Anda ingin membangun sebuah pola yang cocok dengan lebih dari satu set karakter. Misalnya, pola Utah | Idaho | Nevada cocok dengan string yang berisi "Utah" atau "Idaho" atau "Nevada". Tanda kurung memberi kita cara untuk urutan kelompok. Sebagai contoh, (Nant|b)ucket cocok "Nantucket" atau "bucket". Menggunakan tanda kurung ke grup bersama karakter untuk pergantian disebut pengelompokan.
Jika Anda ingin mencocokkan semua metakarakter literal dalam pola, anda harus menggunakan garis miring terbalik (\)

Untuk menetapkan satu set karakter diterima dalam pola Anda, Anda dapat membangun sebuah kelas karakter sendiri atau menggunakan satu standar. Sebuah kelas karakter memungkinkan Anda mewakili sekelompok karakter sebagai item tunggal dalam ekspresi reguler. Anda dapat membangun kelas karakter Anda sendiri dengan melampirkan karakter yang diterima dalam tanda kurung persegi. Sebuah kelas karakter cocok salah satu karakter di kelas. Misalnya kelas karakter [abc] cocok dengan a, b, atau c. Untuk menentukan berbagai karakter, hanya menempatkan karakter pertama dan terakhir lalu dipisahkan dengan tanda hubung. Misalnya, untuk mencocokkan semua karakter alfanumerik: [a-zA-Z0-9]. Anda juga dapat membuat kelas menegasikan karakter, yang sesuai dengan setiap karakter yang bukan di kelas. Untuk membuat karakter menegasikan kelas, mulai kelas karakter dengan ^: [^ 0-9].

Metakarakter +, *, ?, dan {} Mempengaruhi berapa kali pola harus dicocokkan.
+ Berarti "Cocok satu atau lebih dari ekspresi sebelumnya",
* berarti "Cocok nol atau lebih dari ekspresi sebelumnya",
? berarti "Cocok nol atau satu dari ekspresi sebelumnya".
Kurung kurawal {} dapat digunakan berbeda. Dengan bilangan bulat, {n} berarti "sama persis n kejadian dari ekspresi sebelumnya", dengan satu bilangan bulat dan koma, {n,} berarti "cocok n atau kejadian lebih dari ekspresi sebelumnya", dan dengan dua dipisahkan dengan koma {bilangan bulat n, m} berarti "sesuai dengan karakter sebelumnya jika terjadi setidaknya n kali, tapi tidak lebih dari kali m".

Sekarang, kita lihat tabel berikut:

Regular Expression Will match...
foo The string "foo"
^foo "foo" at the start of a string
foo$ "foo" at the end of a string
^foo$ "foo" when it is alone on a string
[abc] a, b, or c
[a-z] Any lowercase letter
[^A-Z] Any character that is not a uppercase letter
(gif|jpg) Matches either "gif" or "jpeg"
[a-z]+ One or more lowercase letters
[0-9\.\-] Аny number, dot, or minus sign
^[a-zA-Z0-9_]{1,}$ Any word of at least one letter, number or _
([wx])([yz]) wy, wz, xy, or xz
[^A-Za-z0-9] Any symbol (not a number or a letter)
([A-Z]{3}|[0-9]{4}) Matches three letters or four numbers

Expressions Perl-Compatible Regular meniru sintaks Perl untuk pola, yang berarti bahwa setiap pola harus diapit sepasang pembatas. Biasanya karakter yang digunakan yaitu, slash (/). Sebagai contoh, /pola/.

Fungsi-fungsi PCRE dapat dibagi dalam beberapa kelas yaitu: matching (pencocokan), replacing (menggantikan), splitting (membelah) dan filtering (penyaringan).