Salt la conținutul principal
Modulul 6 · Lecția 1 din 421/32 în curs~10 min
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.

Code
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 g va 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ă

Exercițiu#regex.m6.l1.e1
Încercări: 0Se încarcă…

Extrageți NUMAI cifrele prețurilor în euro (secvențele de cifre urmate de „euro”). Nicio monedă în meci.

Se încarcă editorul...
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

Exercițiu#regex.m6.l1.e2
Încercări: 0Se încarcă…

Găsiți fiecare cuvânt imediat urmat de două puncte `:` (dar fără a include două puncte în potrivire).

Se încarcă editorul...
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ă

Exercițiu#regex.m6.l1.e3
Încercări: 0Se încarcă…

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

Se încarcă editorul...
Afișează indiciu

Mutați \\( (paranteză deschisă scăpată) în interiorul anticipării pozitive (?=...).

Soluție disponibilă după 3 încercări