Tema ini menjelaskan mode pencocokan untuk ekspresi reguler serta metode yang dapat digunakan untuk meloloskan karakter khusus dalam ekspresi reguler.
Pencocokan penuh
Jika ekspresi reguler cocok dengan seluruh string, maka pencocokan penuh dilakukan. Sebagai contoh, \d+ sepenuhnya cocok dengan 1234.
Beberapa fungsi mendukung pencocokan sebagian untuk ekspresi reguler. Untuk melakukan pencocokan penuh, Anda dapat mengapit ekspresi reguler menggunakan tanda caret (^) dan tanda dolar ($) dalam format ^Ekspresi reguler$. Untuk informasi lebih lanjut, lihat Operasi Ekspresi Reguler.
Tabel berikut menjelaskan mode pencocokan untuk fungsi yang berbeda.
Kategori | Fungsi | Mode pencocokan |
Fungsi pemrosesan global | Pencocokan sebagian | |
Pencocokan penuh | ||
Pencocokan penuh | ||
Pencocokan penuh | ||
Pencocokan sebagian | ||
Fungsi ekspresi | Pencocokan penuh secara default (dapat dikonfigurasi menggunakan parameter) | |
Pencocokan sebagian | ||
Pencocokan sebagian | ||
Pencocokan sebagian | ||
Pencocokan sebagian secara default (dapat dikonfigurasi menggunakan parameter) | ||
Pencocokan sebagian | ||
Pencocokan sebagian |
Contoh berikut didasarkan pada mode pencocokan yang berbeda:
regex_match("abc123", r"\d+"): String cocok dengan ekspresi reguler. Dalam contoh ini, mode pencocokan default adalah pencocokan sebagian.regex_match("abc123", r"\d+", full=True): String tidak cocok dengan ekspresi reguler. Dalam contoh ini, mode pencocokan diatur ke pencocokan penuh.regex_match("abc123", r"^\d+$"): String tidak cocok dengan ekspresi reguler. Dalam contoh ini, mode pencocokan dianggap sebagai pencocokan penuh.e_search(r'status~="\d+"'): Apakah nilai dari bidang status cocok dengan ekspresi reguler tergantung pada nilai aktual. Dalam contoh ini, mode pencocokan dianggap sebagai pencocokan sebagian.e_search(r'status~="^\d+$"'): Apakah nilai dari bidang status cocok dengan ekspresi reguler tergantung pada nilai aktual. Dalam contoh ini, mode pencocokan dianggap sebagai pencocokan penuh.
Meloloskan karakter
Ekspresi reguler mungkin berisi karakter khusus. Jika Anda ingin mempertahankan arti literal dari karakter tersebut, Anda harus meloloskan karakter tersebut. Anda dapat menggunakan metode berikut untuk meloloskan karakter khusus:
Gunakan backslash (\).
Untuk informasi lebih lanjut, lihat Meloloskan Karakter Khusus.
Gunakan fungsi
str_regex_escape.Contoh 1: Jika Anda menggunakan
e_drop_fields(str_regex_escape("abc.test")), bidang abc.test akan dibuang.Contoh 2: Jika Anda menggunakan
e_drop_fields("abc.test"), bidang yang cocok dengan abc?test akan dibuang. Tanda tanya (?) menentukan karakter apa saja.
Grup
Anda dapat menggunakan tanda kurung () untuk mengapit subekspresi dalam ekspresi reguler guna membuat grup. Grup tersebut dapat dirujuk berulang kali. Contoh berikut menunjukkan perbedaan antara ekspresi reguler sebelum dan sesudah pembuatan grup:
"""
Log sebelum diproses:
SourceIP: 192.0.2.1
Log setelah diproses:
SourceIP: 192.0.2.1
ip: 192.0.2.1
"""
# Sebelum grup dibuat:
e_regex("SourceIP",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
# Setelah grup dibuat:
e_regex("SourceIP", "\d{1,3}(.\d{1,3}){3}", "ip")Grup penangkapan
Konten teks yang cocok dengan grup penangkapan disimpan dalam memori. Konten teks yang cocok dapat digunakan kembali dalam ekspresi reguler lainnya menggunakan referensi balik. Jika konten yang diapit dalam tanda kurung () dari sebuah grup tidak dimulai dengan ?:, maka grup tersebut adalah grup penangkapan.
Secara default, semua grup penangkapan dinomori dari kiri ke kanan berdasarkan tanda kurung pembuka. Grup pertama diberi nomor 1, grup kedua diberi nomor 2, dan seterusnya. Dalam contoh berikut, tiga grup penangkapan dibuat:
(\d{4})-(\d{2}-(\d{2}))
1 1 2 3 32Jika ekspresi reguler berisi grup penangkapan umum dan grup penangkapan bernama, grup penangkapan bernama dinomori setelah grup penangkapan umum. Simple Log Service memungkinkan Anda merujuk langsung nama kustom grup penangkapan dalam ekspresi reguler atau program.
Grup non-penangkapan
Konten teks yang cocok dengan grup non-penangkapan tidak disimpan dalam memori. Jika konten yang diapit dalam tanda kurung () dari sebuah grup dimulai dengan ?:, maka grup tersebut adalah grup non-penangkapan.
Sebagai contoh, jika Anda ingin mencari program dan project, Anda dapat menggunakan ekspresi reguler pro(gram|ject). Jika Anda tidak ingin menyimpan konten yang cocok dengan ekspresi reguler dalam memori, Anda dapat menggunakan pro(?:gram|ject).
(?:x) menentukan bahwa x cocok dengan konten tetapi konten yang cocok tidak disimpan. Anda dapat mendefinisikan subekspresi dalam format (?:x) dan menggunakan subekspresi bersama dengan operator dalam ekspresi reguler.