Salt la conținutul principal
Modulul 6 · Lecția 2 din 422/32 în curs~10 min
Lecții din modul (2/4)

Privire negativă înainte: `(?!...)`

Prospecția negativă (?!...) este sora întunecată a anticipării pozitive: necesită ca modelul dat NU să urmeze poziția curentă. Este încă zero-width: nu este consumat niciun caracter.

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

Doar 75 se potrivește, deoarece este singura secvență de cifre NU urmată de euro. Cifrele 100 și 25 sunt urmate de euro și sunt excluse.

Tipare de anticipare negative tipice

  • ^(?!.*errore).*$ -- o linie care NU conține cuvântul „errore”.
  • \b(?!the\b)\w+\b -- un cuvânt care nu este the.
  • (?!\s) -- poziția curentă NU este un spațiu alb (util ca „decupare”).
Code
Pattern: ^(?!.*\.bak$).*$
Sample (multiline with flag m):
  foto.jpg
  backup.bak
  documento.txt
Match: foto.jpg, documento.txt (excludes backup.bak)

Excluderi avansate prin anticipare negativă

Prevederea negativă (?!...) este esențială pentru implementarea logicii de excludere (cum ar fi verificarea faptului că o parolă nu conține cuvinte din dicționar sau că un identificator nu este un cuvânt cheie rezervat, cum ar fi class sau function).

Încearcă

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

Găsiți fiecare număr NU urmat de „euro” (deci excluzând prețurile în euro).

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

Folosiți (?! ...) pentru a spune „NU trebuie să urmeze”. Secvența „euro” nu trebuie să apară după.

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

Exercițiu de revizuire

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

Găsiți fiecare cuvânt de cel puțin 3 litere care NU este „cel” (insensibil la majuscule).

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

Imediat după \\b deschideți un lookahead negativ (?!the\\b) care exclude doar cuvântul the.

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

Provocare suplimentară

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

Find all words consisting of letters that do not contain the letter `x` at any position (e.g. match `test`, `game` but not `extra`, `box`).

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

Utilizați un aspect negativ (?!\\w*x) imediat după limita cuvântului \\b.

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