Wednesday, October 31, 2012

Menggunakan ekspresi regular dengan Perl

Kali ini saya ingin memperkatakan tentang satu lagi kelebihan bahasa pengaturcaraan Perl iaitu penggunaan ekspresi regularnya.

Ekspresi regular (regular expression) ialah notasi yang digunakan bagi menyatakan suatu corak atau susunan am aksara atau simbol. Misalnya 'yunus' untuk perkataan 'yunus', '\d+' menyatakan corak am suatu nombor ('\d' mewakili 1 digit, '\d+' mewakili 1 atau lebih digit). Asasnya ekspresi regular sangat berguna untuk proses mencari segolongan teks tertentu dalam suatu teks spt. mengesan kehadiran perkataan 'perl' dalam teks 'bahasa pengaturcaraan perl' (secara teknikalnya disebut mencari sub-rentetan dalam suatu rentetan), atau menentusahkan format tertentu bagi suatu teks (seperti format matawang, tarikh dll).

Perl menggunakan notasi yang dikenali sebagai PCRE (Perl-compatible regular expression), iaitu notasi ekspresi regular dengan simbol-simbol khas yang diperkenalkan dalam bahasa Perl. Sesetengahnya diterapkan oleh bahasa-bahasa pengaturcaraan lain. Amnya notasi ini memadankan aksara dengan aksara. Maknanya notasi 'Yunus' akan sepadan dengan teks 'Yunus'. Selain itu terdapat juga meta-aksara seperti '.', '*', '+', '[...]' dsb. Misalnya jika kita ingin mencari suatu teks yang hanya mengandungi digit-digit, kita boleh menggunakan ekspresi regular '\d+'; atau memadankan teks berformat tarikh dengan corak am '\d\d\/\d\d\/\d{4}'.

Berikut adalah sebahagian notasi PCRE dan maksudnya (untuk maklumat lanjut boleh rujuk tutorial PerlRE),
  • a-z = mewakili set huruf/simbol 'a' hingga 'z'
  • \d =  mewakili digit antara 0 hingga 9
  • \d+ = mewakili 1 atau lebih digit
  • . = 'dot', mewakili semua aksara
  • .+ = mewakili 1 atau lebih jujukan aksara selain daripada aksara penamat baris (newline)
dll.

Perl menyediakan kemudahan (dalam bentuk operator) yang membolehkan pengatur cara menggunakan ekspresi regular dalam atur cara. Operator-operator yang boleh digunakan ialah seperti berikut:
  • m/corak/ - m(atch) ialah operator yang digunakan bagi memadankan (mencari) corak dalam suatu rentetan. Misalnya,
if ($teks =~ m/foo/) {
    # buat sesuatu jika corak 'foo' dijumpai dalam $teks
}
  • s/corak/ganti/ - s(ubstitute) ialah operator yang digunakan bagi mencari padanan corak dan menggantikannya dengan teks gantian. Misalnya aturcara berikut akan mengubah $teks yang mengandungi rentetan 'fooyo' kepada 'ayoyo':
$teks = 'fooyo';
$teks =~ s/foo/ayo/;  # 'ayoyo'
  • tr/setA/setB/ - tr(ansliterate) ialah operator yang digunakan bagi memadankan susunan 'setA' dan menggantikannya dengan 'setB'. SetA dan setB mestilah jujukan huruf atau simbol. Misalnya aturcara berikut akan mengubah $teks yang mengandungi rentetan 'contoh' kepada 'CONTOH':
$teks =~ tr/a-z/A-Z/;

Aturcara berikut akan mengubah $teks yang mengubah rentetan 'contoh' kepada suatu 'teks sulit' (encrypted text) dan 'menyahkod'nya semula kepada bentuk asal:
$teks = 'contoh';
$teks =~ tr/a-z/zyxwvutsrqponmlkjihgfedcba/;  # 'xlmgls'
$teks =~ tr/zyxwvutsrqponmlkjihgfedcba/a-z/;  # 'contoh'
Selain operator ekspresi regular, ekspresi regular juga turut/boleh digunakan pada fungsi atau operator tertentu dalam Perl, misalnya operator grep { } dan split ().

Penggunaan dan kepentingan ekspresi regular sangat luas kerana ianya masih lagi dimaju dan dipertingkatkan. Begitu juga dengan aplikasinya dalam pengaturcaraan Perl mahupun bahasa pengaturcaraan yang lain. Sebagai pengatur cara, menguasai ekspresi regular dan keupayaan menggunakannya dalam Perl mungkin dapat memberi kita kelebihan atau sekurang-kurangnya memudahkan tugas pengaturcaraan.


No comments:

Post a Comment