Regular Expression PHP

Regular expression adalah pola yang digunakan dalam pencarian character atau kata.

Biasanya regular expression digunakan di dalam preg_match() function atau preg_match_all() function.

Syntax

/pattern/

[pattern] adalah pola kata yang digunakan dalam pencarian sedangkan symbol slash / pada awal dan akhir [pattern] disebut sebagai [delimiter] yang berguna sebagai pembatas [pattern].

Contoh, kita ingin mengetahui apakah di dalam string [abc123] ada kata [abc] maka terlebih dahulu kita akan membuat sebuah regular expression seperti di bawah ini:

/abc/

Berikut ini adalah contoh penggunaan regular expression di dalam preg_match() function:

Code PHP 1:

<?php
echo preg_match("/abc/", "abc123");
?>

Hasil code PHP 1:

1

Pada contoh di atas, preg_match() function menghasilkan angka 1 yang artinya preg_match() function berhasil menemukan kata yang dicari.

Delimiter

Selain symbol slash /, ada beberapa symbol lain yang bisa digunakan sebagai delimiter. Berikut ini adalah beberapa symbol delimiter yang valid untuk digunakan:

  • /abc/
  • #abc#
  • ~abc~
  • %abc%
  • (abc)
  • {abc}
  • [abc]
  • <abc>

Bila ada character di dalam regular expression yang sama dengan delimiter maka kamu bisa menggunakan symbol escape character yaitu backslash \ supaya character tersebut tidak dianggap sebagai delimiter. Alternatif lainnya adalah kamu bisa menggunakan delimiter yang berbeda. Perhatikan contoh berikut ini:

/http:\/\//
#http://#

Pada kedua contoh di atas kita ingin mencari kata [http://]. Pada contoh pertama kita menggunakan symbol escape character backslash \ sebelum symbol slash / supaya symbol slash tersebut tidak dianggap sebagai delimiter.

Pada contoh kedua di atas kita menggunakan symbol delimiter #.

Meta character

Meta character adalah beberapa character yang memiliki arti spesial di dalam regular expression.

Berikut ini adalah daftar beberapa meta character yang ada:

  • \ (Backslash)
  • ^ (Caret)
  • [ (Opening brace)
  • ] (Closing brace)
  • . (Full stop)
  • * (Asterix)
  • + (Plus)
  • ? (Question Mark)
  • { (Opening curly brace)
  • } (Closing curly brace)
  • | (Pipe)
  • ( (Opening parens)
  • ) (Closing parens)

Jika kita ingin menggunakan meta character sebagai salah satu character yang ingin dicari di dalam regular expression maka kita bisa menggunakan escape character backslash \.

Contoh, kita ingin mencari kata ini: 1+1. Pada kata tersebut ada meta character +. Untuk memasukkan meta character + sebagai bagian kata yang ingin dicari maka kita harus menambahkan symbol escape character bakslash \ di depan meta character tersebut seperti ini: \+.

Berikut ini adalah code regular expression bila kita ingin mencari kata 1+1.

/1\+1/

Berikut ini adalah contoh penggunaan regular expression di atas di dalam preg_match() function:

Code PHP 2:

<?php
echo preg_match("/1\+1/", "1+1=2");
?>

Hasil code PHP 2:

1

Symbol backslah \ sendiri termasuk ke dalam meta character. Sehingga bila kita ingin menggunakan backslash \ sebagai salah satu character yang ingin dicari di dalam regular expression maka kita harus menulis seperti ini: \\.

Meta character caret ^

Meta character caret ^ berguna untuk mencari character atau kata yang ada pada bagian awal string.

Contoh, kita ingin mengetahui apakah pada bagian awal string [abc123] ada kata [abc].

Code PHP 3:

<?php
if (preg_match("/^abc/", "abc123")) {
    echo "Pencarian berhasil.";
} else {
    echo "Pencarian gagal.";
}
?>

Hasil code PHP 3:

Pencarian berhasil.

Meta character bracket []

Meta character bracket [] memiliki arti kumpulan character atau character set.

Meta character bracket [] bisa digunakan seperti berikut ini:

  • [aiueo] – Mencocokkan salah satu huruf dari huruf berikut ini: a, i, u, e atau o.
  • [a-f] – Mencocokkan salah satu huruf mulai dari huruf a sampai f (abcdef).

Regular expression /[a-f]/ sama artinya dengan /[abcdef]/. Sedangkan regular expression /[A-F]/ sama artinya dengan /[ABCDEF]/.

Regular expression normal dirancang berdasarkan aturan bahwa huruf besar dan kecil dianggap tidak sama (b tidak sama dengan B) sehingga regular expression /[a-f]/ tidak sama dengan regular expression /[A-F]/.

Berikut ini adalah contoh pemakaian bracket [] dalam regular expression:

Code PHP 4:

<?php
$string = "big";

echo preg_match("/b[aiu]g/", $string);
?>

Code preg_match() function di atas akan menghasilkan angka 1 karena preg_match() function berhasil menemukan kata yang cocok.

Regular expression /b[aiu]g/ artinya adalah mencari kata [bag], [big] atau [bug] yang ada di dalam string. Jika salah satu dari kata tersebut ada maka preg_match() function akan menghasilkan angka 1.

Berdasarkan regular expression /b[aiu]g/ maka preg_match() function akan mencari kata [bag] terlebih dahulu. Jika kata [bag] ditemukan maka pencarian berhenti dan preg_match() function menghasilkan angka 1.

Sebaliknya, jika kata [bag] tidak ditemukan maka preg_match() function akan mencari kata selanjutnya yaitu [big]. Jika kata [big] ditemukan maka pencarian berhenti dan preg_match() function menghasilkan angka 1.

Selanjutnya, jika kata [big] tidak ditemukan maka preg_match() function akan mencari kata selanjutnya yaitu [bug]. Jika kata [bug] ditemukan maka pencarian berhenti dan preg_match() function menghasilkan angka 1. Sebaliknya, jika kata [bug] tidak ditemukan maka pencarian berhenti dan preg_match() function menghasilkan angka 0.

Symbol caret ^ bisa digunakan di dalam symbol bracket [] seperti contoh berikut ini:

  • [^abc] – Mencocokkan salah satu character kecuali huruf a, b atau c. Regular expression [^abc] merupakan kebalikan dari [abc].
  • [^a-f] – Mencocokkan salah satu character kecuali huruf a sampai huruf f.

Pada contoh berikut ini kita ingin mengetahui apakah di dalam string [abc123] ada character selain huruf [b]:

Code PHP 5:

<?php
$string = 'abc123';

preg_match("/[^b]/", $string, $matches);
print_r($matches);
?>

Hasil code PHP 5:

Array ( [0] => a )

Contoh di atas menggunakan print_r() function untuk menampilkan informasi mengenai array $matches.

Code preg_match() function di atas menggunakan parameter matches yang diisi dengan array $matches. Jika parameter matches diisi dengan array $matches maka array $matches tersebut akan berisi hasil pencarian.

Pada contoh di atas, preg_match() function berhasil menemukan character yang bukan huruf b pada string yaitu huruf a. Code preg_match() function hanya mencari character atau kata yang cocok paling pertama, setelah berhasil menemukan yang dicari maka preg_match() function akan langsung menghentikan pencarian selanjutnya.

Code preg_match() function memiliki perbedaan dengan preg_match_all() function dalam hasil pencarian. Perbedaanya adalah preg_match() function hanya mencari character atau kata pertama yang cocok sedangkan preg_match_all() function mencari semua kata yang cocok.

Berikut ini adalah contoh penggunaan preg_match_all() function:

Code PHP 6:

<?php
$string = 'abc123';

preg_match_all("/[^b]/", $string, $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => c
            [2] => 1
            [3] => 2
            [4] => 3
        )
)

Berikut ini adalah beberapa kombinasi yang menggunakan symbol bracket [] di dalam regular expression:

Regexp <Penjelasan
[abc] Mencocokkan salah satu huruf dari huruf berikut ini: a, b atau c.
[a-f] Mencocokkan salah satu huruf mulai dari huruf a sampai f (abcdef).
[A-F] Mencocokkan salah satu huruf mulai dari huruf A sampai F (ABCDEF).
[1-3] Mencocokkan salah satu angka mulai dari angka 1 sampai 3 (123).
[^abc] Mencocokkan salah satu character kecuali huruf a, b atau c.
[^a-f] Mencocokkan salah satu character kecuali huruf a sampai huruf f.
[^A-F] Mencocokkan salah satu character kecuali huruf A sampai huruf F.
[^1-3] Mencocokkan salah satu character kecuali angka 1 sampai 3.
[a-zA-Z0-9] Mencocokkan salah satu huruf kecil, huruf besar atau angka.

Meta character titik [.]

Symbol titik [.] di dalam regular expression artinya adalah mencocokkan satu buah character apapun kecuali code new line \n.

Contoh, kita ingin mencari sebuah kata yang terdiri dari tiga buah character yaitu: [b.g]. Kata tersebut harus diawali dengan huruf b dan diakhiri dengan huruf g. Character kedua dari kata tersebut boleh character apa saja.

Berdasarkan definisi kata yang kita cari di atas maka regular expression yang harus kita buat akan tampak seperti berikut ini:

/b.g/

Berdasarkan regular expression di atas ada banyak kata yang bisa kita cari, diantaranya yaitu: bag, bbg, bcg, bdg, b1g, b2g, dll.

Code PHP 7:

<?php
$string = "Ada bug di dalam tas";

preg_match("/b.g/", $string, $matches);
print_r($matches);
?>

Hasil code PHP 7:

Array ( [0] => bug )

Pada contoh di atas, preg_match() function berhasil menemukan kata yang dicari yaitu kata [bug].

Meta character asterix *

Meta character * artinya adalah mencocokkan character yang ada sebelum meta character * sebanyak nol kali atau lebih. Meta character * memiliki arti yang sama dengan regular expression {0,}.

Contoh 1, regular expression /a*/ akan cocok dengan [aaa] pada string [aaah]. Regular expression /a*/ mencocokkan character [a] sebanyak tiga kali.

Contoh 2, regular expression /a*/ akan cocok dengan [a] pada string [ah]. Regular expression /a*/ mencocokkan character [a] sebanyak satu kali.

Contoh 3, menggunakan regular expression /a*/ pada string [uh] akan menghasilkan string kosong [] karena tidak ada character [a] pada string [uh] sehingga regular expression mencocokkan character [a] sebanyak nol kali.

Contoh 4, regular expression /ph*p/ akan cocok dengan [php] pada string [php].

Contoh 5, regular expression /ph*p/ akan cocok dengan [pp] pada string [pp].

Code PHP 8:

<?php
$string = "Ada buuug di dalam tas";

preg_match("/bu*g/", $string, $matches);
print_r($matches);
?>

Hasil code PHP 8:

Array ( [0] => buuug )

Meta character titik [.] bisa digunakan bersama dengan meta character [*] seperti ini: /.*/ yang artinya adalah mencocokkan semua character yang ada.

Code PHP 9:

<?php
$string = "Ada buuug di dalam tas";

preg_match("/.*/", $string, $matches);
print_r($matches);
?>

Hasil code PHP 9:

Array ( [0] => Ada buuug di dalam tas )

Meta character +

Meta character + artinya adalah mencocokkan character yang ada sebelum meta character + sebanyak satu kali atau lebih. Meta character + memiliki fungsi yang sama dengan regular expression {1,}.

Meta character + hampir sama dengan meta character *. Perbedaannya adalah meta character * boleh mencocokkan nol kali sedangkan meta character + setidaknya harus mencocokkan satu kali.

Contoh, regular expression /ph*p/ akan cocok dengan [pp] pada string [pp] karena character [h] boleh dianggap tidak ada pada regular expression /ph*p/. Sedangkan regular expression /ph+p/ tidak akan cocok dengan string [pp] karena setidaknya harus ada satu character [h].

Code PHP 10:

<?php
echo preg_match("/ph+p/", "pp");
?>

Hasil code 10:

0

Meta character ?

Meta character ? artinya adalah mencocokkan character yang ada sebelum meta character ? sebanyak nol kali atau satu kali. Meta character ? memiliki fungsi yang sama dengan regular expression {0,1}.

Contoh 1, regular expression /ab?c/ akan cocok dengan [abc] pada string [abc].

Contoh 2, regular expression /ab?c/ akan cocok dengan [ac] pada string [ac].

Contoh 3, regular expression /ab?cd?/ akan cocok dengan [acd] pada string [acd].

Contoh 4, regular expression /ab?c/ tidak akan cocok dengan apapun pada string [abbc].

Code PHP 11:

<?php
preg_match("/123-?456/", "123456", $matches);
print_r($matches);
?>

Hasil code PHP 11:

Array ( [0] => 123456 )

Meta character {}

Meta character {} bisa digunakan dalam tiga cara cara, yaitu:

  • a{x}
  • a{x,y}
  • a{x,}

Cara pertama: a{x}

Regular expression di atas artinya adalah mencocokkan character a sebanyak x kali.

Contoh 1, regular expression /a{2}/ akan cocok dengan [aa] pada string [baag]. Regular expression /a{2}/ artinya adalah mencocokkan character a sebanyak 2 kali.

Contoh 2, regular expression /a{2}/ tidak akan cocok dengan apapun pada string [bag].

Contoh 3, regular expression /a{2}/ akan cocok dengan dua character a pertama pada string [baaag].

Code PHP 12:

<?php
preg_match("/[0-9]{3}/", "abc123", $matches);
print_r($matches);
?>

Hasil code PHP 12:

Array ( [0] => 123 )

Regular expression /[0-9]{3}/ di atas artinya adalah mencocokkan angka apapun sebanyak 3 kali.

Cara kedua: a{x,y}

Regular expression di atas artinya adalah mencocokkan character [a] sebanyak [x] kali (minimum) sampai [y] kali (maksimum). [x] adalah angka minimum character [a] boleh dicocokkan dan [y] adalah angka maksimum character [a] boleh dicocokkan.

Contoh 1, regular expression /a{2,4}/ akan cocok dengan [aaa] pada string [baaag]. Regular expression /a{2,4}/ artinya adalah mencocokkan character a sebanyak 2, 3 atau 4 kali.

Code PHP 13:

<?php
preg_match("/[0-9]{3,5}/", "abc123", $matches);
print_r($matches);
?>

Hasil code PHP 13:

Array ( [0] => 123 )

Cara ketiga: a{x,}

Regular expression di atas artinya adalah mencocokkan character a sebanyak minimal x kali.

Code PHP 14:

<?php
preg_match("/[0-9]{1,}/", "abc123", $matches);
print_r($matches);
?>

Hasil code PHP 14:

Array ( [0] => 123 )

Meta character pipe |

Symbol pipe | bisa ditemukan di atas tombol enter.

Meta character pipe | artinya adalah [atau].

Contoh, regular expression /hijau|merah/ akan cocok dengan kata [hijau] pada string [lampu hijau] atau kata [merah] pada string [lampu merah].

Code PHP 15:

<?php
$string = "ada bug di dalam komputer";

preg_match("/bug|bag/", $string, $matches);
print_r($matches);
?>

Hasil code PHP 15:

Array ( [0] => bug )

Meta character ()

Meta character () memiliki beberapa fungsi, yaitu:

  1. Memproses beberapa character sebagai satu kesatuan
  2. Menangkap subpattern
  3. Lookahead
  4. Negated lookahead
  5. Lookbehind
  6. Negated lookbehind

Fungsi pertama meta character () yaitu memproses beberapa character sebagai satu kesatuan.

Contoh, regular expression /(abc)+/ akan cocok dengan kata [abcabc] pada string [abcabc123]. Pada contoh tersebut meta character + memproses kata [abc] sebagai satu kesatuan dan mencocokkannya dengan string [abcabc123] sebanyak satu kali atau lebih.

Bandingkan bila regular expression di atas tidak menggunakan meta character (). Regular expression /abc+/ akan cocok dengan kata [abc] pada string [abcabc123]. Berdasarkan hasil tersebut terlihat bahwa meta character + hanya mencocokkan character [c] dan bukannya character [abc].

Code PHP 16:

<?php
preg_match("/p(hp)*/", "php adalah bahasa komputer", $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak seperti berikut ini:

Array
(
    [0] => php
    [1] => hp
)

Pada preg_match() function, hasil pencarian yang cocok dengan character yang ada di dalam meta character () disebut sebagai subpattern.

Pada contoh di atas, array $matches[0] berisi kata yang cocok dengan seluruh pola regular expression yaitu [php]. Sedangkan array $matches[1] berisi character yang cocok dengan subpattern 1 yaitu [hp].

Berikut ini adalah contoh lainnya penggunaan meta charater ():

Code PHP 17:

<?php
preg_match("/(a|b|c)123/", "b123", $matches);

foreach($matches as $key=>$value) {
echo $key.'->'.$value.'<br />';
};
?>

Hasil code PHP 18:

0->b123
1->b

Contoh di atas menggunakan foreach loop untuk menampilkan semua nilai array $matches.

Meta charater () bisa dikombinasikan seperti ini: /x(.*)x/ yang artinya adalah mencocokkan dengan kata apapun yang ada dimulai dengan x dan diakhiri dengan x.

Contoh 1, regular expression /x(.*)x/ cocok dengan kata [xooox] pada string [xooox].

Contoh 2, regular expression /x(.*)x/ cocok dengan kata [xabcx] pada string [xabcxooo].

Fungsi kedua meta character () yaitu menangkap subpattern.

Contoh, Jika regular expression /a((b|c)(d|e))/ dicocokkan dengan string [abd] maka akan menghasilkan kata yang cocok yaitu [abd] dengan subpattern 1 yaitu [bd], subpattern 2 yaitu [b] dan subpattern 3 yaitu [d].

Jika menggunakan preg_match() function maka subpattern tersebut akan disimpan di dalam array $matches[1], $matches[2] dan $matches[3]. Sedangkan array $matches[0] akan menyimpan kata yang cocok dengan seluruh pola regular expression.

Urutan dari subppatern ditentukan oleh urutan symbol ( yang ada di dalam regular expression.

Code PHP 19:

<?php
preg_match("/a((b|c)(d|e))/", "abd", $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak seperti berikut ini:

Array
(
    [0] => abd
    [1] => bd
    [2] => b
    [3] => d
)

Jika kamu ingin meta character () tidak menangkap subpattern maka kamu bisa mengunakan ?: setelah meta character (.

Code PHP 20:

<?php
preg_match("/a((?:b|c)(d|e))/", "ace", $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak seperti berikut ini:

Array
(
    [0] => ace
    [1] => ce
    [2] => e
)

Subpattern juga bisa diberi nama dengan menggunakan syntax (?P<name>pattern). Subpattern yang mendapakan nama disimpan di dalam array dalam dua cara yaitu berdasarkan nama dan berdasarkan nomor index.

Code PHP 21:

<?php
preg_match("/a((?P<satu>b|c)(?P<dua>d|e))/", "ace", $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak seperti berikut ini:

Array
(
    [0] => ace
    [1] => ce
    [satu] => c
    [2] => c
    [dua] => e
    [3] => e
)

Fungsi ketiga meta character () yaitu digunakan sebagai lookahead.

/x(?=y)/

Regular expression di atas artinya adalah mencocokkan [x] hanya jika ada [y] di sebelah kanan [x]. Regular expression seperti di atas dinamakan sebagai lookahead atau lihat ke depan.

Contoh 1, regular expression /a(?=b)/ akan cocok dengan [a] hanya jika ada [b] di sebelah kanan [a]. Namun [b] tidak ikut dalam hasil yang dicocokkan karena [b] hanya dijadikan syarat dalam mencocokkan string.

Contoh 2, regular expression /lampu(?=hijau|merah)/ akan cocok dengan [lampu] hanya jika ada [hijau] atau [merah] di sebelah kanan [lampu]. Namun [hijau] atau [merah] tidak masuk dalam hasil yang dicocokkan.

Code PHP 22:

<?php
preg_match("/abc(?=123)/", "abc123", $matches);
print_r($matches);
?>

Hasil code PHP 22:

Array ( [0] => abc )

Fungsi keempat meta character () yaitu digunakan sebagai negated lookahead.

x(?!y)

Regular expression di atas artinya adalah mencocokkan [x] hanya jika tidak ada [y] di sebelah kanan [x]. Regular expression seperti di atas dinamakan sebagai negated lookahead atau menegatifkan lihat ke depan.

Contoh, regular expression /lampu(?!hijau|merah)/ akan cocok dengan [lampu] hanya jika tidak ada [hijau] atau [merah] di sebelah kanan [lampu]. [hijau] atau [merah] tidak masuk dalam hasil yang dicocokkan.

Code PHP 23:

<?php
preg_match("/abc(?!123)/", "abc123", $matches);
print_r($matches);
?>

Hasil code PHP 23:

Array ( )

Fungsi kelima meta character () yaitu digunakan sebagai lookbehind.

/(?<=y)x/

Regular expression di atas artinya adalah mencocokkan [x] hanya jika ada [y] di sebelah kiri [x]. Regular expression seperti di atas dinamakan sebagai lookbehind atau lihat ke belakang.

Contoh 1, regular expression /(?<=b)a/ akan cocok dengan [a] hanya jika ada [b] di sebelah kiri [a].

Contoh 2, regular expression /(?<=hijau|merah)lampu/ akan cocok dengan [lampu] hanya jika ada [hijau] atau [merah] di sebelah kiri [lampu].

Code PHP 24:

<?php
preg_match("/(?<=123)abc/", "123abc", $matches);
print_r($matches);
?>

Hasil code PHP 24:

Array ( [0] => abc )

Fungsi keenam meta character () yaitu digunakan sebagai negated lookbehind.

/(?<!y)x/

Regular expression di atas artinya adalah mencocokkan [x] hanya jika tidak ada [y] di sebelah kiri [x]. Regular expression seperti di atas dinamakan sebagai negated lookbehind atau menegatifkan lihat ke belakang.

Contoh 1, regular expression /(?<!b)a/ akan cocok dengan [a] hanya jika tidak ada [b] di sebelah kiri [a].

Contoh 2, regular expression /(?<!hijau|merah)lampu/ akan cocok dengan [lampu] hanya jika tidak ada [hijau] atau [merah] di sebelah kiri [lampu].

Code PHP 25:

<?php
preg_match("/(?<!123)abc/", "123abc", $matches);
print_r($matches);
?>

Hasil code PHP 25:

Array ( )

Escape sequence

Sequence artinya adalah kumpulan character yang sejenis.

Escape sequence adalah code regular expression yang menggunakan symbol backslash \.

Symbol backslash \ di dalam regular expression memiliki beberapa fungsi, yaitu:

  1. Sebagai escape character
  2. Mencocokkan character berdasarkan jenisnya.
  3. Mencocokkan character berdasarkan posisinya di dalam string.

Fungsi pertama symbol backslash \ adalah sebagai escape character yaitu untuk memasukkan salah satu meta character sebagai character yang dicari pada regular expression.

Contoh, kita ingin mencari kata [http:\\] maka kita harus memiliki regular expression seperti ini: [/http:\/\//].

Fungsi backslash \ yang kedua yaitu untuk mencocokkan character berdasarkan jenisnya. Berikut ini adalah beberapa code escape sequence yang berhubungan dengan fungsi kedua backslash \ di dalam regular expression:

Regexp Penjelasan
\d Mencocokkan satu character yang berupa angka (digit) – sama dengan [0-9]
\D Mencocokkan satu character yang bukan angka – sama dengan [^0-9]
\s (s kecil) Mencocokkan satu character kosong (whitespace) seperti spasi dan baris baru (new line \n) – sama dengan [ \t\n\r\f\v]
\S (S besar) Mencocokkan satu character yang bukan character kosong (whitespace) seperti spasi dan new line – sama dengan [^ \t\n\r\f\v] atau [^\s]
\w (w kecil) Mencocokkan satu character yang berupa huruf, angka atau garis bawah _ – sama dengan [a-zA-Z0-9_]
\W (W besar) Mencocokkan satu character yang bukan berupa huruf, angka atau garis bawah _ – sama dengan [^a-zA-Z0-9_]

Escape sequence \d

Escape sequence \d berguna untuk mencocokkan satu character yang berupa angka (digit).

Code PHP 26:

<?php
preg_match_all("/\d/", "abc123", $matches);

foreach($matches[0] as $value) {
    echo $value;
};
?>

Hasil code PHP 26:

123

Berikut ini adalah cara untuk mengetahui apakah sebuah string dimulai dengan angka:

Code PHP 27:

<?php
$string = "2 tas mewah";

echo preg_match("/^\d/", $string);
?>

Hasil code PHP 27:

1

Escape sequence \D

Escape sequence \D berguna untuk mencocokkan satu character yang bukan angka – sama dengan [^0-9].

Code PHP 28:

<?php
preg_match_all("/\D/", "abc123", $matches);

foreach($matches[0] as $value) {
    echo $value;
};
?>

Hasil code PHP 28:

abc

Escape sequence \s (s kecil)

Escape sequence \s berguna untuk mencocokkan satu character kosong (whitespace) seperti spasi dan baris baru (new line \n) – sama dengan [ \t\n\r\f\v].

Code PHP 29:

<?php
$string = "PHP" . "\n" . "adalah" . "\n" . "bahasa" . "\n" . "komputer";

echo preg_match_all("/\s/", $string);
?>

Hasil code PHP 29:

3

Pada contoh di atas, code preg_match_all berhasil menemukan ada 3 buah code new line \n.

Escape sequence \S (S besar)

Escape sequence \S berguna untuk mencocokkan satu character yang bukan character kosong (whitespace) seperti spasi dan new line – sama dengan [^ \t\n\r\f\v] atau [^\s].

Code PHP 30:

<?php
$string = "PHP" . "\n" . "adalah" . "\n" . "bahasa" . "\n" . "komputer";

echo preg_match_all("/\S/", $string);
?>

Hasil code PHP 30:

23

Pada contoh di atas, code preg_match_all berhasil menemukan ada 23 buah character yang bukan spasi atau baris baru.

Escape sequence \w (w kecil)

Escape sequence \w berguna untuk mencocokkan satu character yang berupa huruf, angka atau garis bawah _ – sama dengan [a-zA-Z0-9_].

Code PHP 31:

<?php
$string = "a-b c<*def@";

preg_match_all("/\w/", $string, $matches);

foreach($matches[0] as $value) {
    echo $value;
};
?>

Hasil code PHP 31:

abcdef

Pemakaian regular expression seperti di atas berguna untuk membersihkan string dari character-character yang tidak berguna.

Escape sequence \W (W besar)

Escape sequence \W berguna untuk mencocokkan satu character yang bukan berupa huruf, angka atau garis bawah _ – sama dengan [^a-zA-Z0-9_].

Code PHP 32:

<?php
$string = "a-b c<>*def@";

preg_match_all("/\W/", $string, $matches);

foreach($matches[0] as $value) {
    echo $value;
};
?>

Hasil code PHP 32:

- <>*@

Fungsi ketiga backslash \ yaitu untuk mencocokkan character berdasarkan posisinya di dalam string. Berikut ini adalah code escape sequence yang berhubungan dengan fungsi ketiga backslash \ di dalam regular expression:

Regexp Penjelasan
\A Mencocokkan character yang ada pada bagian awal string.
\b Mencocokkan character yang tidak berbatasan dengan word boundary [a-zA-Z0-9_].
\B Mencocokkan character yang berbatasan dengan word boundary [a-zA-Z0-9_].
\z (z kecil) Mencocokkan character yang ada pada bagian akhir string.
\Z (Z besar) Mencocokkan character yang ada pada bagian akhir string atau character yang ada sebelum code new line \n yang ada pada bagian akhir string.
\G Mencocokkan character mulai dari awal string atau dari character yang cocok sebelumnya.

Escape sequence \A

Escape sequence \A memiliki fungsi yang hampir sama dengan meta character caret ^ yaitu berguna untuk mencocokkan character yang ada pada bagian awal string.

Perbedaanya adalah meta character caret ^ bisa dimodifikasi dengan modifier m sedangkan escape sequence \A tidak bisa.

Pada contoh berikut ini kita ingin mengetahui apakah pada bagian awal string [abc123] ada [abc]:

Code PHP 33:

<?php
echo preg_match("/\Aabc/", "abc123");
?>

Hasil code PHP 33:

1

Escape sequence \b

Escape sequence \b berguna untuk mencocokkan character yang tidak berbatasan dengan word boundary [a-zA-Z0-9_].

Contoh 1, regular expression /\ba/ tidak akan cocok dengan string [sa]. Pada regular expression /\ba/ tersebut, escape sequence \b ditambahkan ke sebelah kiri huruf a yang artinya di sebelah kiri huruf a tidak boleh ada huruf, angka ataupun garis bawah.

Contoh 2, regular expression /\ba/ akan cocok dengan [a] pada string [s a]. Pada string [s a] tersebut, yang ada di sebelah kiri huruf a adalah spasi dan bukannya huruf, angka maupun garis bawah.

Contoh 3, regular expression /a\b/ akan cocok dengan [a] pada string [sa]. Pada regular expression /a\b/ tersebut, escape sequence \b ditambahkan ke sebelah kanan huruf a yang artinya di sebelah kanan huruf a tidak boleh ada huruf, angka ataupun garis bawah.

Contoh 4, regular expression /\ba\b/ akan cocok dengan [a] pada string [&a%]. Pada regular expression /\ba\b/ tersebut, escape sequence \b ditambahkan ke sebelah kiri dan kanan huruf a yang artinya di sebelah kiri dan kanan huruf a tidak boleh ada huruf, angka ataupun garis bawah.

Code PHP 34:

<?php
preg_match("/\babc/", "xabc", $matches);
print_r($matches);
?>

Hasil code PHP 34:

Array ( )

Jika escape sequence \b muncul di dalam meta character bracket [] seperti ini: [\b] maka itu artinya adalah mencocokkan satu code backspace dan bukannya word boundary.

Escape sequence \B

Escape sequence \B berguna untuk mencocokkan character yang berbatasan dengan word boundary [a-zA-Z0-9_].

Code PHP 35:

<?php
preg_match("/\Babc/", "xabc", $matches);
print_r($matches);
?>

Hasil code PHP 35:

Array ( [0] => abc )

Escape sequence \z (z kecil)

Escape sequence \z berguna untuk mencocokkan character yang ada pada bagian akhir string.

Pada contoh berikut ini kita ingin mengetahui apakah pada bagian akhir string ada [23]:

Code PHP 36:

<?php
$string = "abc123";

echo preg_match("/23\z/", $string);
?>

Hasil code PHP 36:

1

Escape sequence \z bisa dipastikan dipastikan gagal dalam mencocokkan kata jika pada bagian akhir string ada code new line \n. Perhatikan contoh berikut ini:

Code PHP 37:

<?php
$string = "abc123" . "\n";

echo preg_match("/23\z/", $string);
?>

Hasil code PHP 37:

0

Escape sequence \Z (Z besar)

Escape sequence \Z berguna untuk mencocokkan character yang ada pada bagian akhir string atau character yang ada sebelum code new line \n yang ada pada bagian akhir string.

Pada contoh berikut ini kita ingin mengetahui apakah pada bagian akhir string ada [23]:

Code PHP 38:

<?php
$string = "abc123";

echo preg_match("/23\Z/", $string);
?>

Hasil code PHP 38:

1

Berikut ini adalah contoh pada bagian akhir string ada code new line \n:

Code PHP 39:

<?php
$string = "abc123" . "\n";

echo preg_match("/23\Z/", $string);
?>

Hasil code PHP 39:

1

Escape sequence \G

Escape sequence \G berguna untuk mencocokkan character mulai dari awal string dan dari character yang cocok sebelumnya.

Escape sequence \G digunakan dalam preg_match_all untuk mencari character yang cocok secara bersambung. Perhatikan contoh di bawah ini:

Code PHP 40:

<?php
$string = '12a3';

preg_match_all("/\G[0-9]/", $string, $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
        )
)

Regular expression /\G[0-9]/ artinya adalah mencocokkan character yang berupa angka mulai dari awal string dan dari character yang cocok sebelumnya.

Pada contoh di atas:

  • Character [1] cocok karena berada pada awal string.
  • Character [2] cocok karena character [1] sebelumnya adalah character yang cocok.

Sekarang bandingkan contoh di atas dengan contoh di bawah ini yang tidak menggunakan escape sequence \G:

Code PHP 41:

<?php
$string = '12a3';

preg_match_all("/[0-9]/", $string, $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
)

Pada contoh di atas, regular expression /[0-9]/ artinya adalah mencocokkan character yang berupa angka dimanapun character tersebut berada.

Pada contoh di atas, character [123] cocok karena berupa angka.

Sekarang bandingkan kedua contoh di atas dengan contoh di bawah ini yang menggunakan escape sequence \A:

Code PHP 42:

<?php
$string = '12a3';

preg_match_all("/\A[0-9]/", $string, $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

Array
(
    [0] => Array
        (
            [0] => 1
        )
)

Pada contoh di atas, regular expression /\A[0-9]/ artinya adalah mencocokkan character yang berupa angka yang ada pada awal string.

Pada contoh di atas, character [1] cocok karena berada pada awal string.

Berdasarkan ketiga contoh di atas, ada perbedaan antara escape sequence \A dan \G dan regular expression yang tidak menggunakan keduanya, yaitu:

  • Pada contoh 1, regular expression /\G[0-9]/ cocok dengan kata [12] pada string [12a3].
  • Pada contoh 2, regular expression /\[0-9]/ cocok dengan kata [123] pada string [12a3].
  • Pada contoh 3, regular expression /\A[0-9]/ cocok dengan kata [1] pada string [12a3].

Anchor

Anchor adalah regular expression yang mencocokkan character atau kata berdasarkan posisinya.

Berikut ini adalah daftar beberapa anchor yang ada:

Regexp Penjelasan
^ Mencocokkan kata yang ada pada bagian awal string.
$ Mencocokkan kata yang ada pada bagian akhir string atau kata yang ada sebelum code new line \n yang ada pada bagian akhir string.
\A Mencocokkan kata yang ada pada bagian awal string.
\b Mencocokkan kata yang tidak berbatasan dengan word boundary [a-zA-Z0-9_].
\B Mencocokkan kata yang berbatasan dengan word boundary [a-zA-Z0-9_].
\z (z kecil) Mencocokkan kata yang ada pada bagian akhir string.
\Z (Z besar) Mencocokkan kata yang ada pada bagian akhir string atau kata yang ada sebelum code new line \n yang ada pada bagian akhir string. Sama dengan escape sequence \Z.

Sebagian anchor sama dengan beberapa regular expression yang sudah dibahas.

  • Anchor ^ sama dengan meta character ^.
  • Anchor \A, \b, \B, \z dan \Z sama dengan escape sequence \A, \b, \B, \z dan \Z.

Anchor $

Anchor $ berguna untuk mencocokkan kata yang ada pada bagian akhir string atau kata yang ada sebelum code new line \n yang ada pada bagian akhir string.

Anchor $ hampir sama dengan escape sequence \Z (Z besar). Perbedaanya adalah anchor $ bisa dimodifikasi dengan modifier m sedangkan escape sequence \Z tidak bisa.

Pada contoh berikut ini kita ingin mengetahui apakah pada bagian akhir string ada kata [23]:

Code PHP 43:

<?php
$string = "abc123";

echo preg_match("/23$/", "abc123");
?>

Hasil code PHP 43:

1

Anchor $ bisa digunakan bersama dengan meta character ^ seperti ini: /^abc$/ yang artinya mencocokkan dengan string yang sama persis yaitu string [abc].

Anchor $ juga bisa dikombinasikan seperti ini: /^.{2}$/ yang artinya adalah mencocokkan dengan string apapun yang memiliki dua character.

Modifier

Modifier berguna untuk memodifikasi prilaku atau cara kerja regular expression.

Berikut ini adalah daftar beberapa modifier yang ada:

Regexp Penjelasan
i Membuat huruf besar dan kecil dianggap sama (B sama dengan b).
s Memodifikasi prilaku meta character titik [.].
m Memodifikasi prilaku meta character ^ dan anchor $ dalam pencarian.
x Memudahkan regular expression untuk dibaca dengan dipisah-pisahkan dan diberi comment.
U Mengubah sifat greedy (serakah) regular expression menjadi ungreedy (tidak serakah).

Modifier i

Modifier i atau case insensitive berguna supaya huruf besar dan kecil dianggap sama dalam pencarian (MARTABAK sama dengan martabak). Tanpa modifier i maka huruf besar dan kecil akan dianggap tidak sama (MARTABAK tidak sama dengan martabak).

Contoh, kita ingin mencari kata [martabak] dalam sebuah kalimat maka terlebih dahulu kita akan membuat sebuah regular expression seperti di bawah ini:

/martabak/i

Berikut ini adalah contoh penggunaan preg_match() function menggunakan modifier i:

Code PHP 44:

<?php
echo preg_match("/php/i", "PHP adalah bahasa komputer.");
?>

Hasil code PHP 44:

1

Pada contoh di atas, regular expression menggunakan modifier i sehingga kata [php] dianggap sama dengan [PHP].

Modifier s

Modifier s berguna untuk memodifikasi prilaku meta character titik [.].

Dalam keadaan normal, meta character titik [.] berguna untuk mencocokkan satu character apapun kecuali code new line \n.

Code new line \n memiliki fungsi yang hampir sama dengan tag HTML <br />. Perbedaannya adalah code new line \n berguna bila outputnya adalah file atau database dan bukannya browser.

Jika regular expression menggunakan modifier m maka meta character titik [.] bisa mencocokkan satu character apapun termasuk code new line \n.

Berikut ini adalah contoh penggunaan new line \n:

Code PHP 45:

<?php
echo "lampu" . "\n" . "hijau";
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak seperti berikut ini:

lampu
hijau

Berikut ini adalah contoh yang membuktikan bahwa meta character titik [.] tidak bisa mencocokkan code new line \n:

Code PHP 46:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/Lampu.hijau/", $string);
?>

Hasil code PHP 46:

0

Pada contoh berikut ini kita akan melengkapi regular expression di atas dengan modifier s:

Code PHP 47:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/lampu.hijau/s", $string);
?>

Hasil code PHP 47:

1

Modifier m

Modifier m berguna untuk memodifikasi prilaku meta character ^ dan anchor $ dalam pencarian.

Dalam keadaan normal, meta character ^ akan mencocokkan character dengan bagian awal string. Jika regular expression menggunakan modifier m maka meta character ^ bisa mencocokkan character dengan bagian awal string atau setelah code new line \n.

Berikut ini adalah contoh penggunaan meta character ^ dalam keadaan normal:

Code PHP 48:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/^hijau/", $string);
?>

Hasil code PHP 48:

0

Pada contoh di atas terlihat bahwa regular expression dengan meta character ^ tidak bisa mencocokkan character yang ada setelah code new line \n.

Berikut ini adalah contoh penggunaan meta character ^ yang dilengkapi dengan modifier m:

Code PHP 49:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/^hijau/m", $string);
?>

Hasil code PHP 49:

1

Dalam keadaan normal, anchor $ akan mencocokkan character dengan bagian akhir string. Jika regular expression menggunakan modifier m maka anchor $ akan mencocokkan character sebelum code new line \n atau dengan bagian akhir string.

Berikut ini adalah contoh penggunaan anchor $ dalam keadaan normal:

Code PHP 50:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/lampu$/", $string);
?>

Hasil code PHP 50:

0

Pada contoh di atas terlihat bahwa regular expression dengan anchor $ tidak bisa mencocokkan character yang ada sebelum code new line \n.

Berikut ini adalah contoh penggunaan anchor $ yang dilengkapi dengan modifier m:

Code PHP 51:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/lampu$/m", $string);
?>

Hasil code PHP 51:

1

Sebuah modifier bisa digunakan bersama dengan beberapa modifier lainnya. Berikut ini adalah contoh modifier m digunakan bersama dengan modifier i:

Code PHP 52:

<?php
$string = "lampu" . "\n" . "hijau";

echo preg_match("/LAMPU$/im", $string);
?>

Hasil code PHP 52:

1

Modifier x

Modifier x berguna untuk memudahkan regular expression untuk dibaca dengan dipisah-pisahkan dan diberi comment.

Jika modifier x digunakan maka white space (spasi dan new line \n) dan comment # yang ada di dalam regular expression akan dibiarkan atau tidak akan dianggap sebagai regular expression. Bagian yang bisa diberi whitespace dan comment adalah bagian yang ada di dalam delimiter.

Code PHP 53:

<?php
$string = "PHP adalah bahasa komputer.";

$regexpress = "
/     # delimiter awal
php   # Pattern
/ix";

echo preg_match($regexpress, $string);
?>

Hasil code PHP 53:

1

Modifier U

Modifier U berguna untuk mengubah sifat greedy (serakah) regular expression menjadi ungreedy (tidak serakah).

Regular expression pada keadaan normal bersifat greedy atau serakah yang artinya adalah mencocokkan character semaksimal mungkin. Sifat greedy ini bisa dilihat umumnya pada regular expression berikut ini: *, ?, +, dan {min,max}.

Contoh 1, regular expression /x(.*)x/ pada keadaan normal akan cocok dengan kata [xaxbx] pada string [xaxbx]. Berdasarkan hasil tersebut kita bisa melihat bahwa regular expression /x(.*)x/ mencocokkan kata pada string mulai dari [x] pertama sampai [x] yang terakhir.

Sekarang bandingkan dengan regular expression di atas yang telah dimodifikasi dengan modifier U seperti ini: /x(.*)x/U. Regular expression /x(.*)x/U akan cocok dengan kata [xax] pada string [xaxbx]. Berdasarkan hasil tersebut kita bisa melihat bahwa regular expression /x(.*)x/U hanya mencocokkan kata mulai dari [x] pertama sampai [x] kedua.

Contoh 2, regular expression /<.+>/ memiliki arti mencari kata yang dimulai dengan character [<] dan diikuti oleh satu atau lebih character apapun kemudian diakhiri dengan character [>].

Regular expression /<.+>/ pada keadaan normal akan cocok dengan kata [<em>text</em>] pada string [<em>text</em>]. Berdasarkan hasil tersebut kita bisa melihat bahwa regular expression /<.+>/ mencocokkan kata pada string mulai dari character [<] pertama sampai character [>] yang terakhir.

Sekarang bandingkan dengan regular expression di atas yang telah dimodifikasi dengan modifier U seperti ini: /<.+>/U. Regular expression /<.+>/U akan cocok dengan kata [<em>] pada string [<em>text</em>]. Berdasarkan hasil tersebut kita bisa melihat bahwa regular expression /<.+>/U hanya mencocokkan kata mulai dari character [<] pertama sampai character [>] yang paling pertama ditemui.

Code PHP 54:

<?php
preg_match("/foo(.*)bar/U", "foobar foo--bar fubar", $matches);
print_r($matches);
?>

Hasil running code di atas bila dilihat melalui page source browser akan tampak sebagai berikut ini:

Array
(
    [0] => foobar
    [1] =>
)

Selain menggunakan modifier U, beberapa regular expression berikut ini bisa diubah menjadi ungreedy dengan menambahkan meta character ?.

Greedy Ungreedy
* *?
+ +?
? ??
{n} {n}?
{n,} {n,}?
{n,m} {n,m}?
foo(.*)bar foo(.*?)bar
<.+> <.+?>

Fungsi sebenarnya dari modifier U bukanlah membuat sebuah regular expression menjadi ungreedy melainkan membalik pengaturan regular expression dari greedy menjadi ungreedy dan sebaliknya.

Contoh, regular expression /x(.*)x/ pada keadaan normal akan cocok dengan kata [xaxbx] pada string [xaxbx].

Regular expression di atas bisa diubah menjadi ungreedy dengan menambahkan meta character ? seperti ini: /x(.*?)x/. Regular expression /x(.*?)x/ akan cocok dengan kata [xax] pada string [xaxbx].

Regular expression /x(.*?)x/ di atas yang sudah bersifat ungreedy bisa diubah kembali menjadi greedy dengan menambahkan modifier U seperti ini: /x(.*?)x/U. Regular expression /x(.*?)x/U akan cocok dengan kata [xaxbx] pada string [xaxbx]. Berdasarkan hasil tersebut kita bisa melihat bahwa modifier U membalik pengaturan regular expression dari greedy menjadi ungreedy dan sebaliknya dari ungreedy menjadi greedy.

Quantifier

Quantifier adalah regular expression yang mencocokkan character secara berulang.

Berikut ini adalah daftar regular expression yang termasuk ke dalam quantifier:

Regexp Penjelasan
* Mencocokkan character yang ada sebelum meta character * sebanyak nol kali atau lebih. Meta character * memiliki arti yang sama dengan meta character {0,}.
+ Mencocokkan character yang ada sebelum meta character + sebanyak satu kali atau lebih. Meta character + memiliki fungsi yang sama dengan meta character {1,}.
? Mencocokkan character yang ada sebelum meta character ? sebanyak nol kali atau satu kali. Meta character ? memiliki fungsi yang sama dengan meta character {0,1}.
a{x} Mencocokkan character [a] sebanyak [x] kali.
a{x,y} Mencocokkan character [a] sebanyak [x] kali (minimum) sampai [y] kali (maksimum).
a{x,} Mencocokkan character [a] sebanyak minimal [x] kali.

One Response to “Regular Expression PHP”

  1. BLOGOEOE says:

    Mantap… lengkap banget penjelasan dan contohnya. Ikut belajar regular expression ah :-)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>