Dasar regex

Operator pencocokan m// untuk pola literal dan pengenalan pola sebagai bahasa kecil di dalam bahasa Perl.

Daftar isi

Ekspresi reguler (regular expression) adalah bahasa kecil untuk menggambarkan pola teks, dan Perl menyediakannya sebagai bagian dari sintaksnya sendiri. Topik ini membahas operator pencocokan m//, operator pengikat =~, hasil pencocokan sebagai nilai boolean, serta target default $_. Setelah membacanya, pola literal dapat ditulis dan hasil pencocokannya dapat diperiksa dengan skrip nyata. Pembahasan dimulai dari pencocokan literal karena bentuk inilah dasar bagi seluruh pola yang lebih kompleks.

Operator pencocokan m//#

Operator m// adalah operator pencocokan yang menguji apakah sebuah pola ditemukan pada suatu string. Pola ditulis di antara dua garis miring, sehingga m/Kamis/ berarti mencari teks Kamis. Huruf m boleh dihilangkan ketika delimiternya tetap garis miring, sehingga /Kamis/ dan m/Kamis/ sama saja. Pada pencocokan literal, setiap karakter pola dicocokkan apa adanya, berurutan dari kiri ke kanan, tanpa makna khusus apa pun.

Operator m// tidak berdiri sendiri, melainkan diikat ke string yang diperiksa melalui operator =~. Operator tersebut membaca “cocok dengan”, sehingga $jadwal =~ m/Kamis/ dibaca “apakah $jadwal cocok dengan pola Kamis”. Skrip berikut memperlihatkan bentuk dasarnya:

perl pencocokan.pl
#!/usr/bin/env perl
use strict;
use warnings;

my $jadwal = "piket ruang 204 pada Kamis";

# m// mencocokkan pola terhadap $jadwal melalui operator =~
if ($jadwal =~ m/Kamis/) {
    print "Hari piket adalah Kamis\n";
}

# !~ berarti tidak cocok
if ($jadwal !~ m/Senin/) {
    print "Bukan hari Senin\n";
}
text Keluaran
Hari piket adalah Kamis
Bukan hari Senin

Pola Kamis ditemukan pada $jadwal, sehingga percabangan pertama dijalankan. Percabangan kedua menggunakan !~, yaitu kebalikan =~ yang menguji ketidakcocokan. Karena kata Senin memang tidak ada, pengujian !~ bernilai benar dan pesannya dicetak. Delimiter m// juga boleh diganti, misalnya m{Kamis} atau m|Kamis|, yang berguna ketika pola itu sendiri memuat garis miring.

Pada pengujian boolean, posisi kecocokan tidak diperhatikan, karena yang dinilai hanya ada atau tidaknya teks yang memenuhi pola. Kata Kamis pada contoh berada di ujung string, tetapi pola yang sama tetap cocok bila berada di tengah kalimat. Kebiasaan membaca =~ sebagai “cocok dengan” juga membantu membedakannya dari operator pembanding string yang menguji kesamaan penuh.

Hasil pencocokan sebagai nilai boolean#

Dalam konteks percabangan, m// menghasilkan nilai boolean, yaitu benar bila pola ditemukan dan salah bila tidak. Ketika hasilnya disimpan ke dalam variabel skalar, nilai yang tersimpan adalah 1 untuk kecocokan dan string kosong untuk kegagalan. Nilai 1 tetap berperilaku sebagai angka bila dihitung, sedangkan string kosong berperilaku sebagai nol. Bentuk inilah yang dibaca percabangan if dan unless, sehingga pencocokan biasanya ditulis langsung sebagai kondisi tanpa menyimpan hasilnya lebih dahulu. Skrip berikut menyimpan kedua hasil tersebut dan menampilkannya:

perl nilai-boolean.pl
#!/usr/bin/env perl
use strict;
use warnings;

my $skor = "skor: 90";

my $cocok = ($skor =~ m/skor/);
my $tidak = ($skor =~ m/absen/);

print "Pencocokan 'skor'  : [$cocok]\n";
print "Pencocokan 'absen' : [$tidak]\n";
print "Nilai 1 dapat dijumlahkan: ", $cocok + 1, "\n";
text Keluaran
Pencocokan 'skor'  : [1]
Pencocokan 'absen' : []
Nilai 1 dapat dijumlahkan: 2

Tanda kurung siku pada keluaran memperlihatkan isi variabel dengan jelas. Variabel $cocok memuat 1 karena kata skor ada, sedangkan $tidak memuat string kosong karena kata absen tidak ada. Baris ketiga membuktikan bahwa hasil pencocokan tetap dapat digunakan dalam aritmetika. Dalam praktiknya, hasil m// paling sering langsung diuji pada if atau unless tanpa disimpan terlebih dahulu.

Pengujian boolean menjadi dasar bagi pola penyaringan, yaitu memeriksa sekumpulan baris lalu memproses hanya baris yang lolos uji. Bentuk paling ringkasnya adalah print "..." if $teks =~ m/pola/, yang menjalankan pernyataan hanya bila kecocokan terjadi. Kebalikannya menggunakan unless bersama =~, atau if bersama !~, dan kedua bentuk itu menghasilkan program yang sama.

Target default $_#

Apabila operator =~ dan string targetnya tidak ditulis, m// mencocokkan pola terhadap variabel default $_. Variabel ini terisi secara otomatis pada beberapa konstruksi, salah satunya perulangan foreach yang ditulis tanpa variabel perantara. Pada bentuk itu, setiap elemen array ditempatkan di $_ satu per satu, sehingga pencocokan cukup ditulis /ERROR/ tanpa target. Pola tanpa target ini banyak ditemui pada one-liner, sedangkan skrip yang lebih panjang sebaiknya menyebut targetnya secara eksplisit agar maksudnya terbaca. Skrip berikut menyaring baris catatan log dengan cara tersebut:

perl target-default.pl
#!/usr/bin/env perl
use strict;
use warnings;

my @log = (
    "2026-11-01 ERROR koneksi basis data",
    "2026-11-01 INFO  pemuatan selesai",
    "2026-11-02 ERROR panggilan ulang gagal",
);

# foreach tanpa variabel menugaskan tiap elemen ke $_
foreach (@log) {
    # m// tanpa =~ mencocokkan $_
    if (/ERROR/) {
        print "Baris error: $_\n";
    }
}
text Keluaran
Baris error: 2026-11-01 ERROR koneksi basis data
Baris error: 2026-11-02 ERROR panggilan ulang gagal

Dua baris yang memuat ERROR lolos penyaringan, sedangkan baris INFO tidak dicetak. Pola singkat seperti ini lazim pada skrip penyaring dan one-liner di command line. Pada program yang lebih panjang, penulisan target secara eksplisit dengan =~ tetap lebih disarankan karena pembaca dapat langsung melihat string mana yang diperiksa.

Variabel $_ sering disebut variabel default karena banyak fungsi dan operator menjadikannya target bila argumennya tidak ditulis. Selain m//, fungsi chomp dan print juga membaca $_ tanpa argumen, sehingga perulangan singkat menjadi padat. Bentuk singkat ini efektif pada skrip kecil, tetapi penulisan target secara eksplisit tetap lebih mudah diaudit bila program memanjang.

Pola sebagai bahasa kecil#

Pola literal hanyalah bentuk paling sederhana dari ekspresi reguler. Nilai utama m// baru terasa ketika pola menggambarkan variasi teks, misalnya “dua digit apa pun” atau “kata ini boleh ada atau tidak”. Untuk itu pola dilengkapi simbol-simbol khusus yang membentuk sebuah bahasa kecil di dalam bahasa Perl. Contoh berikut menggunakan simbol \d, yaitu singkatan untuk satu digit:

bash
# pola 20\d\d mencocokkan "20" diikuti dua digit apa pun
perl -e 'use strict; use warnings; my $catatan = "Rapat tahun 2026 di ruang B"; print "Tahun terdeteksi\n" if $catatan =~ m/20\d\d/' 2>&1
text Keluaran
Tahun terdeteksi

Pola 20\d\d mencocokkan 2026 pada string contoh, tetapi pola yang sama juga akan mencocokkan 2045 atau 2099. Satu pola kini mewakili banyak kemungkinan teks, dan itulah perbedaan mendasar antara pencocokan pola dan pencarian teks biasa. Simbol seperti \d, ., *, dan ^ beserta kegunaannya dibahas pada bagian-bagian berikutnya dalam modul ini.

Istilah bahasa kecil tepat karena pola memiliki kosakata sendiri, yaitu karakter biasa yang mencocokkan dirinya sendiri dan metakarakter yang menyatakan variasi. Membaca pola berarti menerjemahkan kosakata itu kembali menjadi deskripsi teks dalam bahasa manusia. Keterampilan tersebut menumpuk secara bertahap, karena pola yang panjang tersusun dari bagian-bagian kecil yang maknanya sudah dikenal terlebih dahulu.

Ringkasan#

  • m// mencocokkan pola terhadap string melalui operator =~, dengan hasil benar bila pola ditemukan dan salah bila tidak, sedangkan !~ menguji ketidakcocokan.
  • Hasil pencocokan bernilai 1 atau string kosong dan dapat digunakan seperti nilai boolean biasa.
  • Tanpa =~, m// mencocokkan variabel default $_, yang terisi otomatis pada foreach tanpa variabel perantara.
  • Pola literal hanyalah bentuk paling sederhana, sedangkan simbol pola seperti \d membuat satu pola mewakili banyak kemungkinan teks.

Referensi#