Penggunaan fungsi PREG_MATCH_ALL pada PHP

• int preg_match_all str pola , str subjek , array matches [, int order ]; • mixed preg_replace mixed pola , mixed pengganti , mixed subjek [, int limit ]; • array preg_split str pola , str subjek [, int limit [, int flags ]]; • string preg_quote str s [, str kutip ]; • array preg_grep str pola , array input ;

2.1.1 Penulisan

Pola regex ditulis sebagai string dan diletakkan diantara tanda pengapit atau tanda pengapit yang dapat kita definisikan sendiri. Sedangkan modifier dituliskan setelah tanda pengapit terakhir .

2.1.2 Fungsi preg_match

Fungsi preg_match pada PHP sama dengan fungsi m yang terdapat pada Perl. Namun tanpa dikenakan modifier g pada akhir pola. Contoh : 10 .latihan_ 01 . php ?php text = Pagi ini saya sarapan Soto. ; preg_match soto|siomay|satei , text , matches ; echo Hai.. Pagi ini kamu sarapan . matches [ ]; ? Program tersebut diatas dapat dijelaskan sebagai berikut : • Program melalui fungsi preg_match akan mencocokkan string pola soto| siomay|sate dan modifier i case insensitive dengan karakter yang terdapat 10 pada variabel text . • Jika terdapat item yang cocok dengan pola regex, item-item tersebut akan disimpan pada variabel matches dalam bentuk array. • Program selanjutnya menampilkan 10 .latihan_ 2 . php ?php text = http:amikom.ac.id ; if preg_match http:\\i , text { echo URL valid. ; } else { echo URL tidak valid. ; } ? Contoh latihan program tersebut diatas digunakan untuk melakukan pengecekan terhadap format URL yang terdapat pada variabel text . Jika URL yang terdapat pada variabel text bernilai valid, maka fungsi preg_match akan mengembalikan nilai true , dan false jika sebaliknya. Sekarang, cobalah mengganti format fungsi preg_match http:\\i , text diatas menjadi preg_match http:i , text , kemudian amati dan analisa hasilnya. Adakah perbedaan?

2.1.3 Fungsi preg_match_all

PHP tidak mendukung modifier g seperti halnya fungsi regex pada Perl. Namun PHP menyediakan fungsi preg_match_all sebagai pengganti dari modifier ini. Fungsi ini biasa digunakan jika kita menginginkan pengambilan seluruh kelompok item yang cocok dengan pola dalam satu text secara sekaligus. Perhatikan contoh program berikut : 11 10 .latihan_ 3 . php ?php teks = Dari awal saya bilang juga ndak apa-apa . mo Perl kek, PHP kek, Java kek . bahasa-bahasa laen kek, semua oke ; n = ; preg_match_all \w+-.+? , teks , matches , PREG_SET_ORDER ; echo Total = . count matches . kata ulang, yaitu :br ; for i = ; i count matches ; i ++ { echo matches [ i ][ 1 ]. br ; n ++ ; } ? Bandingkan program diatas dengan cara mengganti fungsi preg_match_all dengan fungsi preg_match , kemudian amati dan lihat hasilnya.

2.1.4 Fungsi preg_replace

Regular Expression atau biasa disingkat regex, adalah suatu metode untuk mengenali atau mendeteksi suatu pola tertentu pada suatu string.

Dengan menggunakan regex, kita bisa mendeteksi pola string seperti email, hashtag, link dan pola-pola kompleks lainnya dengan hanya satu ekpresi saja.

Ia juga merupakan metode standar dan independen, tidak mengenal bahasa pemrograman. Kita bisa mengimplementasi regex di berbagai macam bahasa pemrograman: termasuk PHP.

Kapan Harus Menggunakan Regular Expression?

Jika anda hanya butuh mendeteksi suatu kata statis dalam suatu string, jangan gunakan regex!

Tapi jika anda butuh untuk mendeteksi suatu pola yang dinamis dalam suatu string, maka anda tidak punya pilihan yang lebih baik dari pada regex.

Misalkan anda memiliki teks seperti ini:

*Kabarkan* kepada semua mahasiswa bahwa besok *kelas pemrograman web diliburkan*

Lalu anda ingin mencetak tebal semua karakter yang diapit dengan tanda bintang (

<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
0), sehingga teks di atas berubah menjadi seperti ini:

Kabarkan kepada semua mahasiswa bahwa besok kelas pemrograman web diliburkan

Maka cara terbaik untuk melakukan hal tersebut adalah: memanfaatkan regex.

Beberapa Fungsi Regular Expression Pada PHP

Di dalam PHP, terdapat beberapa fungsi yang berkaitan dengan penggunaan regex. Di antaranya:

FungsiDeskripsi
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
1Mencari kata/karakter yang sesuai dengan pola regex.
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
2Mencari semua kata/karakter yang sesuai dengan pola regex.
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
3Mencari kata/karakter yang sesuai dengan pola regex, lalu menimpanya dengan data baru.
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
4Mengembalikan kata/karakter yang sesuai dengan pola regex.
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
5Membagi string menjadi sebuah array menggunakan pola regex.

Table 1: fungsi-fungsi bawaan PHP untuk bekerja dengan regex

Beberapa Meta Karakter Regex

Terdapat banyak sekali meta karakter atau pola dalam regex. Akan tetapi, di bawah ini adalah yang mungkin paling sering anda gunakan.

KarakterDeskripsi
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
6karakter putih (spasi, tab, baris baru)
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
7angka digit (0-9)
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
8karkater huruf (a-z, A-Z, 0-9, _)
<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
9pola yang terdiri dari set karakter di dalam kurung siku
<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
0pola yang tidak terdiri dari set karakter di dalam kurung siku`(foobar

Table 2: beberapa meta karakter regex yang sering digunakan

Agar lebih mudah memahami regex, kita akan coba langsung mempraktikkannya. Kasus yang akan kita buat adalah:

  1. Deteksi #hashtag
  2. Deteksi @username
  3. Deteksi Email
  4. Dan Deteksi Kode Spesial Whatsapp

Langsung saja buka teks editor kalian, lalu buat 4 buah file sebagai berikut:

src/
├── fungsi
│   ├── deteksi-email.php
│   ├── deteksi-hashtag.php
│   ├── deteksi-kode-spesial-whatsapp.php
│   └── deteksi-username.php
└── index.php

Pada file

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1, require semua file yang berada pada direktori
<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
2.

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';

Oke, setelah itu kita akan mulai dari setiap kasus.

1. Deteksi #hashtag

Kasus yang pertama adalah mendeteksi setiap kata yang diawali tanda pagar alias hashtag. Setelah berhasil mendeteksi, kita akan mereplace setiap hashtag menjadi link ke twitter.com.

Untuk mendeteksi pola hashtag, kita akan gunakan fungsi

<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
2 yang akan mengembalikan semua teks yang sesuai dengan pola.

Buka file

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1. Lalu tambahkan kode berikut:

<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);

Pada file

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
5, buat fungsi
<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
6. Lalu kita coba untuk mendeteksi semua tanda
<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
7 yang ada (sementara tanda pagarnya saja dulu)

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}

Jika skrip

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1 dijalankan, ia akan menghasilkan output sebagai berikut:

[["#","#"]]

Penjelasan:

  • Pola yang kita definisikan adalah
    <?php
    
    function deteksiHashtag($input)
    {
        $regex = "/#/";
        $hasil = [];
        
        preg_match_all($regex, $input, $hasil);
    
        # kembalikan data dalam bentuk json
        return json_encode($hasil);
    }
    
    9
  • Pola tersebut hanya akan mencari tanda # yang ada pada variabel
    [["#","#"]]
    
    0
  • Hasil kembaliannya, kita mendapatkan ada dua tanda pagar yang dikembalikan

Oke, sekarang kita akan kembangkan polanya menjadi sedikit lebih rumit. Kita akan memanfaatkan tanda kurung siku untuk menentukan set karakter pola untuk mendeteksi hashtag. Silakan lihat kembali ke tabel 2 untuk melihat deskripsi meta karakter yang ada.

Pada file

[["#","#"]]
1, ubah variabel
[["#","#"]]
2 menjadi seperti ini:

<?php

$regex = "/#[a-z]/";

Lalu jalankan lagi file

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1, kita akan mendapatkan output seperti berikut:

[["#v","#k"]]

Penjelasan:

  • di dalam variabel
    [["#","#"]]
    
    2, kita mendefinisikan pola yang berisi 2 karakter.
  • karakter pertama adalah tanda pagar
  • dan karakter kedua adalah set huruf dari a sampai z
  • sehingga hasil yang kita dapatkan adalah
    [["#","#"]]
    
    5 dan
    [["#","#"]]
    
    6.

Pertanyaan: lalu bagaimana untuk mendeteksi semua karakter dalam satu kata yang ada?

Jawabannya adalah: dengan menambahkan tanda

[["#","#"]]
7 setelah kurung siku!

Ubah variabel

[["#","#"]]
2 menjadi seperti ini:

<?php

$regex = "/#[a-z]+/";

Lalu jalankan lagi aplikasi, dan sekarang kita berhasil mendapatkan output yang kita inginkan:

[["#virus","#corona"]]

Agar kita bisa mendeteksi hashtag yang juga berisi angka, huruf kapital serta underscore. Kita harus mengubah variabel

[["#","#"]]
2 seperti berikut:

<?php

$regex = "/#[a-zA-Z0-9_]+/";

Oiya, satu lagi. Kita ingin hanya mendapatkan kata virus saja bukan #virus, begitu juga kata korona saja bukan #korona. Maka kita bisa memberikan tanda kurung untuk memisahkan satu elemen tertentu dari suatu pola regex.

Ubah variabel

[["#","#"]]
2 menjadi seperti berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
0

Jika kita eksekusi, kita akan mendapatkan output seperti berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
1

Anda bisa perhatikan dari output di atas bahwa kita memiliki array dengan 2 item, di mana item pertama berisi pola secara lengkap. Dan item ke-2 berisi pola yang diapit oleh tanda kurung saja (tanpa tanda pagar).

Langkah selanjutnya, kita akan menggunakan fungsi

<?php

$teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
yang akhir-akhir ini mulai menyebar.";

echo deteksiHashtag($teks1);
3 untuk menimpa semua hashtag dengan sebuah link yang mengarah ke twitter.

Ubah fungsi

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
6 menjadi seperti berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
2

Perhatikan baris yang saya highlight di atas:

  • <?php
    
    $regex = "/#[a-z]/";
    
    3 menandakan pola yang diapit oleh tanda kurung
  • sedangkan
    <?php
    
    $regex = "/#[a-z]/";
    
    4 menandakan pola secara keseluruhan
  • jika ada tanda kurung yang lain, maka anda bisa menggunakan variabel
    <?php
    
    $regex = "/#[a-z]/";
    
    5 untuk menampilkannya

Jika program saya eksekusi kembali, saya mendapatkan output seperti berikut:

Dihimbau agar seluruh masyarakat waspada akan #virus #corona yang akhir-akhir ini mulai menyebar.

2. Deteksi @username

Setelah mencoba langkah-langkah yang cukup detil pada contoh kasus pertama, saya rasa untuk kasus kedua tidak terlalu susah. Karena kita hanya perlu mengganti tanda

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
7 di atas menjadi tanda
<?php

$regex = "/#[a-z]/";
7. Lalu mengganti url twitter menjadi
<?php

$regex = "/#[a-z]/";
8.

Langsung saja.

Buka file

<?php

$regex = "/#[a-z]/";
9. Lalu tambahkan fungsi bernama
[["#v","#k"]]
0 sebagaimana berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
3

Lalu pada file

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1, kita bisa menambahkan teks baru seperti berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
4

Ketika saya eksekusi, ini adalah output yang saya dapatkan:

Pak @jokowi telah menyampaikan #pidato yang berisi #himbauan kepada masyarakat untuk tidak banyak beraktifitas di luar rumah demi mencegah tersebarnya #virus #korona.

3. Deteksi Email

Untuk mendeteksi email, kita bisa melakukannya dengan 3 pola bagian:

  • pola pertama adalah username email (sebelum tanda @). Pola ini adalah semua karakter dalam set
    [["#v","#k"]]
    
    2 atau kita bisa singkat dengan menggunakan meta karakter
    <?php
    
    $teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
    yang akhir-akhir ini mulai menyebar.";
    
    echo deteksiHashtag($teks1);
    
    8.
  • pola yang kedua adalah tanda
    <?php
    
    $regex = "/#[a-z]/";
    
    7.
  • pola yang ketiga adalah domain. Domain terdiri dari dari karakter huruf kecil dan titik (
    [["#v","#k"]]
    
    5)

Sehingga ketika 3 pola di atas kita rangkai, kita mendapatkan pola sebagai berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
5

Langsung saja. Silakan buka file

[["#v","#k"]]
6 lalu buat fungsi
[["#v","#k"]]
7 sebagai berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
6

Lalu pada file

<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1, kita bisa tambahkan teks baru sebagai berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
7

Maka setelah dijalankan, output yang kita dapatkan adalah sebagai berikut:

Untuk informasi lebih lanjut tentang pendidikan di Surabaya, anda bisa mengirimkan surel ke alamat [email protected]

4. Deteksi Kode Spesial Whatsapp

Kita telah mencoba 3 contoh kasus. Ketiga contoh tersebut terbilang sederhana karena ketiganya hanya menerapkan satu pola dan satu timpaan.

Sedangkan pada kasus ini, kita akan mencoba 3 pola sekaligus dalam satu kali pemanggilan fungsi

[["#v","#k"]]
9.

Selain menerima parameter string, fungsi

[["#v","#k"]]
9 juga bisa menerima parameter berupa array yang berisi kumpulan lebih dari satu pola.

3 pola yang akan kita buat adalah sebagai berikut:

  • Double underscore (
    <?php
    
    $regex = "/#[a-z]+/";
    
    1): untuk mencetak miring.
  • Double bintang (
    <?php
    
    $teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
    yang akhir-akhir ini mulai menyebar.";
    
    echo deteksiHashtag($teks1);
    
    0): untuk mencetak teks tebal.
  • Double gelombang (
    <?php
    
    $regex = "/#[a-z]+/";
    
    3): untuk mencetak teks tercoret.

Langsung saja.

Buka file

<?php

$regex = "/#[a-z]+/";
4 dan buat fungsi dengan nama
<?php

$regex = "/#[a-z]+/";
5 lalu tuliskan kode program seperti berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
8

Penjelasan:

  • variabel
    [["#","#"]]
    
    2 dan
    <?php
    
    $regex = "/#[a-z]+/";
    
    7 berupa array yang berisi 3 buah item.
  • pola pertama dari array
    [["#","#"]]
    
    2 akan ditimpa oleh string pertama dari array
    <?php
    
    $regex = "/#[a-z]+/";
    
    7, dan begitu seterusnya.
  • meta karakter
    <?php
    
    $teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
    yang akhir-akhir ini mulai menyebar.";
    
    echo deteksiHashtag($teks1);
    
    8 pada setiap pola di atas berarti
    [["#v","#k"]]
    
    2.
  • dan meta karakter
    <?php
    
    $teks1 = "Dihimbau agar seluruh masyarakat waspada akan #virus #corona 
    yang akhir-akhir ini mulai menyebar.";
    
    echo deteksiHashtag($teks1);
    
    6 berarti karakter putih: yaitu spasi, tab, dan ganti baris.
  • kita menggunakan karakter putih karena bisa jadi yang diapit oleh tanda underscore/bintang/gelombang adalah kumpulan beberapa kata yang dipisahkan dengan spasi.

Setelah beres dengan fungsi

<?php

$regex = "/#[a-z]+/";
5. Sekarang kita ubah file
<?php

function deteksiHashtag($input)
{
    $regex = "/#/";
    $hasil = [];
    
    preg_match_all($regex, $input, $hasil);

    # kembalikan data dalam bentuk json
    return json_encode($hasil);
}
1, tambahkan kode program berikut:

<?php

require_once 'fungsi/deteksi-email.php';
require_once 'fungsi/deteksi-hashtag.php';
require_once 'fungsi/deteksi-kode-spesial-whatsapp.php';
require_once 'fungsi/deteksi-username.php';
9

Bismillahirrahmanirrahim.. Mohon maaf, sepertinya besok saya tidak bisa hadir ke kampus karena malas ada suatu kepentingan.

Kode Sumber Lengkap

Kode sumber lengkap untuk tutorial ini dan seri tutorial PHP tingkat menengah lainnya bisa anda dapatkan di repositori github di sini.

Kesimpulan

Regex adalah suatu metode/pendekatan untuk mendeteksi suatu pola dari suatu string. Dengan memanfaatkan regex, kita bisa memeriksa berbagai macam pola teks yang rumit hanya dalam satu ekspresi saja.

Di dalama tutorial ini, kita telah mencoba 4 contoh kasus untuk memahami lebih jauh bagaimana cara bekerja dengan regex pada PHP.