Lecții din modul (1/4)
Privire pozitivă: `(?=...)`
O prospecție pozitivă (?=...) este o afirmație de lățime zero:
se verifică dacă un anumit model urmează poziția curentă, dar o face
nu consuma acele personaje.
Pattern: \d+(?= euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^^ ^^Prevederea (?= euro) necesită ca cifrele să fie urmate de euro, dar
potrivirea include doar cifrele. 75 dollari nu se potrivește (nu euro).
De ce „lățime zero”
Gândiți-vă la anticiparea ca la o condiție a poziției, nu ca la o parte a meciului:
- Meciul se oprește înaintea de anticipare.
- Poziția „după meci” este începutul textului inspectat de lookahead.
- Următoarea încercare de meci cu steagul
gva relua de acolo.
Acest lucru îl face perfect pentru extragerea de valori fără contextul lor: prețuri fără monedă, cuvinte înaintea semnului de punctuație și așa mai departe.
Caracteristici de anticipare și scanare cu lățime zero
Avantajul pozitiv (?=...) garantează că modelul specificat urmează punctul curent, dar scanarea se reia din poziția de dinaintea anticipării. Acest lucru previne „consumarea” părților de text care ar putea fi necesare pentru potrivirile ulterioare.
Încearcă
Extrageți NUMAI cifrele prețurilor în euro (secvențele de cifre urmate de „euro”). Nicio monedă în meci.
Afișează indiciu
Mutați „euro” în interiorul unui lookahead (?= euro): șirul nu va face parte din meci.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Găsiți fiecare cuvânt imediat urmat de două puncte `:` (dar fără a include două puncte în potrivire).
Afișează indiciu
Aceeași logică: `:` nu este în meci, dar este o condiție de poziție.
Soluție disponibilă după 3 încercări
Provocare suplimentară
Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.
Afișează indiciu
Mutați \\( (paranteză deschisă scăpată) în interiorul anticipării pozitive (?=...).
Soluție disponibilă după 3 încercări