Pelajaran modul (4/4)
Melihat-lihat dalam praktiknya
Mari kita gabungkan keempat bentuk pencarian dalam skenario dunia nyata. Pengamatan bersinar ketika Anda perlu:
- Ekstrak nilai tanpa konteks yang mengidentifikasinya.
- Validasi string terhadap beberapa kondisi independen.
- Filter kecocokan yang memenuhi beberapa kondisi namun tidak memenuhi kondisi lainnya.
Validasi kata sandi
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
- at least one uppercase (?=.*[A-Z])
- at least one digit (?=.*\d)
- at least one symbol (?=.*[^a-zA-Z\d])
- minimum length 8 .{8,}Setiap pencarian ke depan memeriksa satu kondisi, dimulai dari awal (^). Benar
all zero-width: mesin tetap pada posisi 0 dan kemudian dikonsumsi
.{8,}$.
Ekstraksi antar pembatas
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (without parentheses)Lihat ke belakang + lihat ke depan + pengukur malas: mengekstraksi konten di dalamnya tanda kurung tanpa menyertakannya.
Menggabungkan pandangan ke depan dan ke belakang
Menggunakan lookahead dan lookbehind bersama-sama memungkinkan isolasi string yang berada dalam tag atau format tertentu (misalnya mengekstraksi teks di antara dua tag tanpa menyertakan tag dalam pencocokan akhir). Hal ini untuk menghindari operasi pembersihan string selanjutnya.
Cobalah
Ekstrak nilai setiap penetapan `kunci=nilai` dari log: HANYA nilai (tanpa kunci, tanpa `=`). Nilai mungkin berisi huruf dan angka.
Tunjukkan petunjuk
Pindahkan `=` ke dalam tampilan ke belakang (?<==): dengan cara ini kecocokan hanya berisi nilai.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Temukan kata-kata yang memiliki setidaknya SATU huruf besar DAN setidaknya SATU digit (dalam urutan apa pun), dan temukan kata-kata tersebut di dalam teks.
Tunjukkan petunjuk
Lihat ke depan dua kali di awal: (?=\\w*[A-Z])(?=\\w*\\d). Kemudian konsumsi kata tersebut dengan \\w+.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.
Tunjukkan petunjuk
Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.
Solusi tersedia setelah 3 upaya