Untuk lebih memahami mari kita mencoba implementasi regex, dengan membuats sebuah program sederahan
1
2
3
4
5
6
7
| <?php// buat string$string = 'abcdefghijklmnopqrstuvwxyz0123456789';// tulisakan hasil stringecho $string;?> |
1
2
3
4
| <?php$string = 'abcdefghijklmnopqrstuvwxyz0123456789';echo preg_match("/abc/", $string);?> |
Mecocokan Awalan dari String
Disini kita akan mencoba mencari string yang awalan dari string tersebut kita tentukan dalam patern kita, misalnya mencari string yang berawalan P, atau mencari string yang berawalan m dan lainya, dalam regex kita akan menggunkan simbol ^ sebagai penanda bahwa kita mencari kecocokan awalan dari string yang kita berikan,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php// string$string = 'abcdefghijklmnopqrstuvwxyz0123456789';// mencoba mencocokan awalan dari stringif(preg_match("/^abc/", $string)){ //jika awalan ditemukan echo 'String dimulai dengan abc'; } else { //jika awalan tidak ditemukan echo 'string tidak di awali dengan abc';}?> |
case insensitive
Jika kita menggunakan code di atas untuk mencari string dengan awaln ABC dengan patern seperti if (preg_match("/^ABC/", $string)) hasinya string tidak di awali dengan abc, karena memang tidak ada string yang di awali dengan ABC, walapun pada hakikatnya abc = ABC, tetapi dalam programming kadang itu bisa menjadi sesuatu yang berbeda, untuk itu kita harus memberi tau kan kepada regex kita bahwa hal itu tidaklah berbeda, dengan cara menambahkan huruf i di akhir delimeter patern yang kita berikan, dengan begitu regex tidak akan memperdulikan huruf kecil dan huruf besar, atau kita akan mencari awalan string tanpa memperdulikan huruf besar atau tidak, seperti ABC, AbC, abc, ABc dll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php// string$string = 'abcdefghijklmnopqrstuvwxyz0123456789';// mencoba mencocokan awalan dari stringif(preg_match("/^ABC/i", $string)){ //jika awalan ditemukan echo 'String dimulai dengan abc'; } else { //jika awalan tidak ditemukan echo 'string tidak di awali dengan abc';}?> |
Mecocokan Akhiran dari String
Jika tadi kita sudah membahas cara sederhana untuk mencari kecocokan string di awalan string, sekarang kita akan mencoba mencari kecocokan di akhiran string, caranya tidak jauh berbeda dengan cara sebelumunya, kita tetap meggunakan simbol ^ sebagai patern regex, hanya bedanya simbol ^ kita berikan di awal patern regex dan menambahkan patern \z di akhir, misalnya kita mencari string yang berakhiran 89 maka patern yang kita berikan adalah preg_match("/89\z/i", $string), tetapi dalam implentasinya banyak yang melakukan kesalahan dalam menerapakan regex yang mencari kecocokan di akhiran string dengan menggunkan simbol $, sebenarnya itu salah, seharusnya kita menggunkan patern \z untuk mencari kecocokan di akhiran string, karena jika menggunakan simbol $ saja hasilnya akan selalu true (1) jika memang patern ditemukan, tetapi masalahnya bagaimana jika masih ada baris selanjutnya ? , tentu saja hasilnya tidak akan sesuai dengan harapn kita, untuk itulah simbol patern $ tidak diperlukan.kecuali jika memang kita mencari akhiran dalam string mempunyai banyak baris., seperti contoh berikut
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php//string$string = 'abcdefghijklmnopqrstuvwxyz0123456789';if(preg_match("/89\z/i", $string)){ echo 'String dikahiri dengan 89'; } else { echo 'String tidak diakhiri dengan 89';}?> |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <?php//string$string = 'abcdefghijklmnopqrstuvwxyz0123456789';if(preg_match("/^89$/i", $string)){ echo 'String dikahiri dengan 89'; } else { echo 'String tidak diakhiri dengan 89';}?> |
Meta characters
Di awal kita sudah mengenal beberapa simbol yang kita gunakan dalam regex, seperti simbol ^ yang menunjukan awal dari string, dam simbol $ dan \z yang menunjukan akhir dari string, masing-masing dari simbol tersebut mempunyai fungsi dan arti tersendiri dalam regex,tetapi dalam regex masih banyak simbol - simbol lainya yang juga memiliki arti dan fungsi tersendiri, seperti berikut- . (full stop)
- ^ (Caret)
- * (Asterix)
- + (Plus)
- ? (Question Mark)
- { (Opening Curly brace)
- } (Closing Curly brace)
- [ (Opening Brace)
- ] (Closing Brace)
- \ (Back Slah)
- | (Pipe)
- ( (Opening Parens)
- ( (Closing Parens)
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php//string$string = '1+1=2';if(preg_match("/^1\+1/i", $string)){ echo 'String diawali dengan 1+1'; } else { echo 'String tidak diawali dengan 1+1';}?> |
Meta characters in Actions
Saya harap sampai disini teman-teman masih belum bosan :D, jika di awal kita telah membahas simbol ^, $ dan \ maka sekarang kita mencoba membahas sedikit tentang meta characters yang lainnya, seperti misalnya penggunaan simbol [ dan ], beberapa waktu lalu sempat seorang teman bertanya kepada saya masalah perbedaan tanda tersebut dengan simbol (), mudah-mudahan tutorial ini bisa menjawabnyasimbol [ dan ] digunakan untuk memberitahukan kepada regex bahwa kita menggunakan patern yang lebih spesipik, misalnya hanya [aiueo] saja, atau [a-z] saja, atau [0-9] saja dan aptern yang lainya, tanda - menunjukan range (sampai) dalam kondisi tertentu seperti a sampai z atau 0 sampai 9, seperti contoh berikut
1
2
3
4
5
| <?php// string$string = 'big';echo preg_match("/b[aiueo]g/", $string, $matches);?> |
Dan bagaiaman jika kita ingin mencari string yang cocok tetapi didalamnya terdapat salah satu meta characters di atas ? atau mencari string yang cocok dalam range tertentu, memang benar, penggunaan meta characters dalam simbol [ dan ] tidak diperbolehkan, tetapi kadang - kadang boleh :D, tetapi dengan kondisi tertentu, misalnya kita ingin mencari string yang tidak di awali dengan string b dalam string, ingat TIDAK di awali, bukan di AWALI, berikut contohnya
1
2
3
4
5
6
7
8
9
10
| <?php$string = 'abcefghijklmnopqrstuvwxyz0123456789';preg_match("/[^b]/", $string, $matches);foreach($matches as $key=>$value) { echo $key.' -> '.$value; }?> |
Sekarang mari kita merubah sedikit program kita, jika pada awalnya kita menggunakan fungsi preg_match(), sekarang kita akan mencoba menggunakan fungsi preg_match_all() dalam mencari string yang TIDAK DIAWALI dengan string b dengan patern preg_match_all("/[^b]/",$string,$matches)
1
2
3
4
5
6
7
8
9
10
| <?php$string = 'abcefghijklmnopqrstuvwxyz0123456789';preg_match_all("/[^b]/", $string, $matches);foreach($matches as $key=>$value) { echo $value; }?> |
1
2
3
4
5
6
7
8
9
10
| <?php$string = 'abcefghijklmnopqrstuvwxyz0123456789';preg_match_all("/[^0-9]/", $string, $matches);foreach($matches as $key=>$value) { echo $value; }?> |
Lebih jauh tentang Escaping Character
Disini kita akan lebih kapada bagaimana memanfaatkan simbol \ dalam meng-escape karakter terentu, meng-sacape bisa di artikan sabagai membaypass, atau melewati sehingga karekter teresbut bisa di proses.misalnya kita akan mencari string yang berada dalam simbol [ dan ], contohnya seperti berikut
1
2
3
4
5
6
7
8
| <?php$string = 'ini adalah [stringsaya]';preg_match_all("/[\[\]]/", $string, $matches);foreach($matches[0] as $value){ echo $value;}?> |
1
2
3
4
5
| <?php$string = 'ini adalah [stringsaya]';preg_match_all("/\[.*\]/", $string, $matches);print_r($matches);?> |
sekarang kita mencoba meta characters . (full stop), simbol ini akan mencocokan semua string kecuali di pisahkan oleh bari baru seperti \n atau \r, dan jika kita ingin mencari semua string yang tidak memperdulikan baris baru seperti pemisahan \r dan \n kita cukup menambahkan flag \s di akhir delimeter regex yang kita berikan, seperti contoh
1
2
3
4
| <?php$string = 'sex at noon taxes';echo preg_match("/s.x/", $string, $matches);?> |
Sekarang mari kita coba untuk string yang memiiki baris yang dipisahkan oleh \r atau \n, seperti contoh
1
2
3
4
5
| <?php$string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";echo nl2br($string);echo preg_match_all("/\s/", $string, $matches);?> |
meta characters selajutnya adalah simbol *, simbol * digunakan untuk mencocokan string apa saja seperti penggunaan .*, simbol * akan meng-anggap cocok setiap string yang ada sebelum mapun sesudah dari patern yang kita berikan, bingung ya, let take it in action
1
2
3
4
| <?php$string = 'php';echo preg_match("/ph*p/", $string, $matches);?> |
berbeda dengan simbol +, jika simbol * mencocokan semaunya, simbol + merupakan kebalikanya, jika menggunakan simbol * string pp dinaggap memiliki kecocokan maka jika kita menggunakan simbol + maka string pp tidak memiliki kecocokan dengan patern yang kita berikan, lihat contoh
1
2
3
4
| <?php$string = 'pp';echo preg_match("/ph+p/", $string, $matches);?> |
Yang paling sering digunakan dalam regex sebenarnya adalah simbol { dan }, karena dengan menggunakan simbol ini regex menjadi lebih ampuh dalam mencocokan patern dengan string, misalnya kita ingin mencari string numeric dalam sebuah string yang jumlahnya sebanyak 3 digit saja, seperti contoh
1
2
3
4
| <?php$string = 'PHP123';echo preg_match("/PHP[0-9]{3}/", $string, $matches);?> |
Special Sequences
Sequences merupakan pradefined dalam class yang kita gunakan, digunakan untuk menggantikan beberapa regex yang panjang sehingga menjadi lebih singkat, Sequences di lambangkan dengan huruf dan di letakan di belakang delimeter regex, berikut beberapa jenis dan fungsinya- \d digunakan untuk mencocokan semua jenis angka, sama dengan [0-9]
- \D digunakan untuk mencocokan semua jenis yang bukan angka sama dengan [^0-9]
- \s digunakan untuk mencocokan semua whitespaces, sama dengan [\t\n\r\f\v]
- \S digunakan untuk mencocokan semua non whitespaces, sama dengan [^\t\n\r\f\v]
- \w digunakan untuk Alphanumeric sama dengan [a-zA-Z0-9]
- \W digunakan untuk non-Alphanumeric, sama dengan [^a-zA-Z0-9]
1
2
3
4
5
6
7
8
| <?php$string = 'ab-ce*fg@ hi & jkl(mnopqr)stu+vw?x yz0>1234<567890';preg_match_all("/[\w]/", $string, $matches);foreach($matches[0] as $value){ echo $value;}?> |
Capturing Text Inside HTML Tags
skerang kita akan mencoba menggunakan regex dalam html, kita akan mencoba mengambil beberapa string berdasarkan tag html, untuk penjelsan dari masing-masing regex saya rasa sudah cukup jelas dari awal sampai akhir, di bagian ini kita akan mencoba menggabungkannya menjadi satu
1
2
3
4
5
6
7
| <?phppreg_match_all('@<h([1-6])>(.+?)</h\1>@is', $html, $matches);foreach ($matches[2] as $text) { print "Heading: $text \n";}?> |
1
2
3
4
5
6
7
| <?phppreg_match_all('@<(strong|em)>(.+?)</\1>@is', $html, $matches);foreach ($matches[2] as $text) { print "Text: $text \n";}?> |
1
2
3
4
5
6
7
8
9
| <?phppreg_match_all('/rel="(prev|next)" href="([^"]*?)"/', $html, $bothMatches);preg_match_all('/rel="(?:prev|next)" href="([^"]*?)"/', $html, $linkMatches);print '$bothMatches is: '; var_dump($bothMatches);print '$linkMatches is: '; var_dump($linkMatches);?> |
1
2
3
4
5
6
7
| <?phppreg_match_all('/rel="(?:prev|next)"(?: title="[^"]+?")? href="([^"]*?)"/', $html, $linkMatches);print '$bothMatches is: '; var_dump($linkMatches);?> |
kalau membuat inisialisasi huruf konsonan atau vokal dengan bagaimana?
ReplyDeletemisalnya inputan “saya makan”
hasilnya
1. saya = kvkv
2. makan = kvkvk
ket:
k = konsonan
v = vokal
terimakasi