Pelajari cara transformasi data SLS menangani pencocokan ekspresi reguler, escaping karakter, dan pengelompokan.
Pencocokan penuh
Pencocokan penuh mengharuskan ekspresi reguler untuk mencocokkan seluruh string. Misalnya, \d+ merupakan pencocokan penuh untuk string 1234.
Beberapa fungsi mendukung pencocokan sebagian. Untuk menerapkan pencocokan penuh, tambahkan ^ di awal dan $ di akhir, seperti pada contoh berikut: ^regular expression$. Sintaks lengkap regex dijelaskan dalam referensi Python Regular expression operations.
Tabel berikut menunjukkan mode pencocokan setiap fungsi.
|
Kategori |
Fungsi |
Mode pencocokan |
|
Fungsi operasi global |
Pencocokan sebagian |
|
|
Pencocokan penuh |
||
|
Pencocokan penuh |
||
|
Pencocokan penuh |
||
|
Pencocokan sebagian |
||
|
Fungsi ekspresi |
Dikontrol parameter. Default-nya pencocokan penuh. |
|
|
Pencocokan sebagian |
||
|
Pencocokan sebagian |
||
|
Pencocokan sebagian |
||
|
Dikontrol parameter. Default-nya pencocokan sebagian. |
||
|
Pencocokan sebagian |
||
|
Pencocokan sebagian |
Contoh mode pencocokan:
-
regex_match("abc123", r"\d+"): Cocok (default-nya pencocokan sebagian). -
regex_match("abc123", r"\d+", full=True): Tidak cocok (mode pencocokan penuh diaktifkan). -
regex_match("abc123", r"^\d+$"): Tidak cocok. Setara dengan mode pencocokan penuh. -
e_search(r'status~="\d+"'): Mencocokkan nilai bidang status. Setara dengan mode pencocokan sebagian. -
e_search(r'status~="^\d+$"'): Mencocokkan nilai bidang status. Setara dengan mode pencocokan penuh.
Escaping karakter
Ekspresi reguler mengandung karakter khusus. Untuk mencocokkannya secara literal, lakukan escaping dengan salah satu metode berikut:
-
Gunakan backslash (\) untuk escaping.
Character escaping mencakup sintaks lengkapnya.
-
Gunakan fungsi
str_regex_escape.-
Misalnya,
e_drop_fields(str_regex_escape("abc.test"))menghapus bidang abc.test. -
Sebagai perbandingan,
e_drop_fields("abc.test")menghapus bidang yang cocok dengan abc?test, di mana tanda tanya (?) merepresentasikan satu karakter apa pun.
-
Pengelompokan
Tanda kurung () digunakan untuk mengelompokkan ekspresi guna pengulangan atau backreference. Contoh berikut menunjukkan perbedaannya:
"""
Log sebelum diproses:
SourceIP: 192.0.2.1
Log setelah diproses:
SourceIP: 192.0.2.1
ip: 192.0.2.1
"""
# Tanpa kelompok:
e_regex("SourceIP",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
# Dengan kelompok:
e_regex("SourceIP", "\d{1,3}(.\d{1,3}){3}", "ip")
Capturing groups
Capturing group menyimpan hasil pencocokan untuk backreference nanti. Setiap kelompok yang tanda kurungnya () tidak diawali dengan ?: merupakan capturing group.
Capturing group diberi nomor mulai dari 1, dari kiri ke kanan, berdasarkan posisi tanda kurung buka. Misalnya, ekspresi berikut memiliki tiga kelompok:
(\d{4})-(\d{2}-(\d{2}))
1 1 2 3 32
Jika sebuah regex mengandung capturing group standar dan bernama, kelompok standar diberi nomor terlebih dahulu, kemudian kelompok bernama. SLS mendukung referensi langsung ke kelompok bernama berdasarkan namanya dalam ekspresi atau program.
Non-capturing groups
Non-capturing group tidak menyimpan hasil pencocokan. Kelompok yang tanda kurungnya () diawali dengan ?: merupakan non-capturing group.
Untuk mencocokkan program atau project, gunakan pro(gram|ject). Jika penyimpanan hasil pencocokan tidak diperlukan, gunakan bentuk non-capturing pro(?:gram|ject).
(?:x) mencocokkan x tanpa menyimpan hasilnya, sehingga Anda dapat mendefinisikan subekspresi untuk digunakan bersama operator regex.