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.
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
gakan 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
Ekstrak HANYA digit harga euro (urutan digit diikuti dengan 'euro'). Tidak ada mata uang dalam pertandingan.
Tunjukkan petunjuk
Pindahkan ' euro' ke dalam tampilan depan (?= euro): string tidak akan menjadi bagian dari kecocokan.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Temukan setiap kata yang langsung diikuti titik dua `:` (tetapi tanpa menyertakan titik dua pada kecocokannya).
Tunjukkan petunjuk
Logika yang sama: `:` tidak cocok, tetapi merupakan kondisi posisi.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.
Tunjukkan petunjuk
Pindahkan \\( (lolos dari tanda kurung terbuka) ke dalam tampilan positif ke depan (?=...).
Solusi tersedia setelah 3 upaya