[^…] (set negat) în Expresii Regulare (RegEx)

Clase de caractere PCRE / ECMAScript / POSIX

Potrivește orice caracter care NU se află în lista sau intervalul dintre parantezele drepte.

Tipar RegEx
[^abc]   |   [^0-9]   |   "[^"]*"

Ce face [^...] (set negat)

Atunci când simbolul circumflex (^) este plasat chiar pe prima poziție în interiorul parantezelor drepte ([^...]), el inversează (neagă) setul de caractere: expresia va potrivi orice caracter care nu este listat în paranteze.

Seturile negate sunt extrem de utile și rapide pentru a extrage textul până la un anumit delimitator (de exemplu "[^"]*" pentru un șir între ghilimele sau [^,]+ pentru valorile dintr-un rând CSV), evitând problemele de performanță (catastrophic backtracking) ale lui .*?. Notă importantă: un set negat precum [^a] potrivește inclusiv caracterul de linie nouă (\n) și cere obligatoriu prezența unui caracter!

Variante și sintaxă asociată

Expresie / Simbol Descriere
[^abc] Orice caracter în afară de a, b sau c (inclusiv spații și \n).
[^0-9] Orice caracter care nu este cifră (echivalent cu \D).
[^"\r\n]+ Unul sau mai multe caractere care nu sunt ghilimele și nu trec pe linie nouă.
<[^>]+> Potrivește un tag HTML simplu de la < până la primul > întâlnit.
[a^b] Dacă ^ NU este primul caracter din paranteze, este tratat ca simbol ^ literal.

Exemple

Exemplul 1: Extragerea textului dintre ghilimele cu „[^”]*”

Folosind [^"]* în loc de .*, ne asigurăm că potrivirea se oprește exact la ghilimeaua de închidere.

Expresie: /"[^"]*"/g
Text:     ' utilizatorul "alex_pop" a trimis mesajul "Salutare tuturor!" '

Potriviri găsite (Matches)

Match 1: "\"alex_pop\""
Match 2: "\"Salutare tuturor!\""

Exemplul 2: Eliminarea caracterelor nepermise dintr-un username

Păstrăm doar litere, cifre, punct și underscore înlocuind tot ce potrivește [^a-zA-Z0-9._].

// PHP:
$input = "ion.popescu!@# 2026$";
$username = preg_replace('/[^a-zA-Z0-9._]+/', '', $input);

Potriviri găsite (Matches)

"ion.popescu2026"

Greșeli frecvente

  • Confuzia între ^ la începutul expresiei (ancoră pentru începutul șirului, ex. ^[abc]) și ^ în interiorul parantezelor (set negat, ex. [^abc]).
  • Presupunerea că q[^u] va potrivi litera q la finalul cuvântului Iraq: [^u] cere obligatoriu existența unui caracter după q care să nu fie u. Pentru „q neurmat de u chiar și la final de cuvânt”, folosește negative lookahead: q(?!u).

Simboluri și rețete înrudite