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