Lompati ke konten utama
Modul 6 · Pelajaran 1 dari 421/32 dalam kursus~10 min
Pelajaran modul (1/4)

Pandangan ke depan yang positif: `(?=...)`

Pandangan positif (?=...) adalah pernyataan lebar nol: ia memeriksa bahwa pola tertentu mengikuti posisi saat ini, tetapi mengikutinya tidak mengkonsumsi karakter tersebut.

Code
Pattern: \d+(?= euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                ^^^                 ^^

Tampilan ke depan (?= euro) mengharuskan angkanya diikuti oleh euro, tetapi pertandingan hanya mencakup angka. 75 dollari tidak cocok (tidak ada euro).

Mengapa "lebar nol"

Bayangkan pandangan ke depan sebagai kondisi pada posisi, bukan sebagai a bagian dari pertandingan:

  • Pertandingan berhenti sebelum tampilan depan.
  • Posisi "setelah pertandingan" adalah awal teks yang diperiksa oleh lookahead.
  • Percobaan pertandingan berikutnya dengan bendera g akan dilanjutkan dari sana.

Hal ini membuatnya sempurna untuk mengekstraksi nilai tanpa konteksnya: harga tanpa mata uang, kata sebelum tanda baca, dan sebagainya.

Fitur Lookahead dan pemindaian lebar nol

Pandangan ke depan positif (?=...) menjamin bahwa pola yang ditentukan mengikuti titik saat ini, tetapi pemindaian dilanjutkan dari posisi sebelum pandangan ke depan. Hal ini mencegah "memakan" bagian teks yang mungkin diperlukan untuk pencocokan berikutnya.

Cobalah

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

Ekstrak HANYA digit harga euro (urutan digit diikuti dengan 'euro'). Tidak ada mata uang dalam pertandingan.

Memuat editor…
Tunjukkan petunjuk

Pindahkan ' euro' ke dalam tampilan depan (?= euro): string tidak akan menjadi bagian dari kecocokan.

Solusi tersedia setelah 3 upaya

Tinjau latihan

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

Temukan setiap kata yang langsung diikuti titik dua `:` (tetapi tanpa menyertakan titik dua pada kecocokannya).

Memuat editor…
Tunjukkan petunjuk

Logika yang sama: `:` tidak cocok, tetapi merupakan kondisi posisi.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

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

Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.

Memuat editor…
Tunjukkan petunjuk

Pindahkan \\( (lolos dari tanda kurung terbuka) ke dalam tampilan positif ke depan (?=...).

Solusi tersedia setelah 3 upaya