Aserțiuni Lookaround Avansate: Validări Multiple și Lookbehind Variabil în Expresii Regulare (RegEx)

Aserțiuni de Lungime Zero Toate motoarele moderne

Ghid complet pentru aserțiuni Lookaround de lățime zero: rețeta de validare a parolelor complexe, lookbehind pozitiv și negativ și noile capabilități de lungime variabilă în PCRE2 și JavaScript V8.

Tipar RegEx
^(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

Aserțiunile Lookaround (Lookahead și Lookbehind) sunt adesea numite „super-puterea secretă” a expresiilor regulate. Ele testează condiții booleene asupra textului adiacent poziției curente a cursorului fără a consuma caractere. După ce un lookaround s-a potrivit cu succes, cursorul de citire al motorului rămâne exact în aceeași poziție ca înainte de test!

Rețeta Universală de Producție: Validarea Parolelor Puternice
^ (?=.*[a-z]) (?=.*[A-Z]) (?=.*\d) (?=.*[@$!%*?&]) [A-Za-z\d@$!%*?&]{8,32} $

// Cum funcționează combinarea de Positive Lookaheads la începutul șirului (^):
// 1. ^ -> Cursorul se află la începutul textului.
// 2. (?=.*[a-z]) -> Verifică dacă există cel puțin o literă mică. Cursorul rămâne la start!
// 3. (?=.*[A-Z]) -> Verifică dacă există cel puțin o literă mare. Cursorul rămâne la start!
// 4. (?=.*\d)     -> Verifică dacă există cel puțin o cifră. Cursorul rămâne la start!
// 5. (?=.*[@$!%*?&]) -> Verifică dacă există cel puțin un caracter special.
// 6. [A-Za-z\d@$!%*?&]{8,32} -> CONSUMĂ efectiv textul și verifică lungimea între 8 și 32 caractere!

Lookbehind cu Lungime Fixă vs. Variabilă

Istoric, motoarele de expresii regulate impuneau ca șablonul din interiorul unui Lookbehind ((?<=...)) să aibă o lungime fixă și cunoscută la compilare (de exemplu (?<=https) sau (?<=abc), dar nu (?<=\d+)). În prezent:

  • JavaScript V8 (Chrome, Node.js): Suportă lookbehind cu lungime variabilă începând cu ES2018 (inclusiv cuantificatori + și *).
  • PCRE2 (PHP 7.4+): Suportă lungime variabilă dacă există o limită maximă definită.
  • Python (modulul re): Impune în continuare lungime fixă; pentru lungime variabilă în Python se folosește biblioteca regex.
Extragerea prețurilor fără moneda adiacentă
// Găsește orice sumă precedată de "RON " sau "EUR ":
(?<=RON\s|EUR\s)\d+(?:\.\d{2})?

// Text: "Factura este de RON 450.00 achitată ieri."
// Rezultat extras: "450.00" (prefixul 'RON ' nu este inclus în rezultat!)