Lompati ke konten utama
Modul 6 · Pelajaran 4 dari 424/32 dalam kursus~12 min
Pelajaran modul (4/4)

Melihat-lihat dalam praktiknya

Mari kita gabungkan keempat bentuk pencarian dalam skenario dunia nyata. Pengamatan bersinar ketika Anda perlu:

  1. Ekstrak nilai tanpa konteks yang mengidentifikasinya.
  2. Validasi string terhadap beberapa kondisi independen.
  3. Filter kecocokan yang memenuhi beberapa kondisi namun tidak memenuhi kondisi lainnya.

Validasi kata sandi

Code
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

Code
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

Latihan#regex.m6.l4.e1
Upaya: 0Memuat…

Ekstrak nilai setiap penetapan `kunci=nilai` dari log: HANYA nilai (tanpa kunci, tanpa `=`). Nilai mungkin berisi huruf dan angka.

Memuat editor…
Tunjukkan petunjuk

Pindahkan `=` ke dalam tampilan ke belakang (?<==): dengan cara ini kecocokan hanya berisi nilai.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#regex.m6.l4.e2
Upaya: 0Memuat…

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.

Memuat editor…
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

Latihan#regex.m6.l4.e3
Upaya: 0Memuat…

Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.

Memuat editor…
Tunjukkan petunjuk

Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.

Solusi tersedia setelah 3 upaya