Ce face (?<nume>...) (grup cu nume)
Pe măsură ce o expresie regulară crește, urmărirea grupurilor după număr ($m[1], $m[4], $m[7]) devine fragilă și greu de citit: dacă adaugi ulterior o paranteză la începutul expresiei, toate numerele grupurilor următoare se decalează cu 1!
Grupurile de captură cu nume (Named Capturing Groups) rezolvă această problemă permițându-ți să botezi fiecare captură folosind sintaxa (?<nume>...) (suportată în PHP/PCRE, JavaScript ES2018+, C#, .NET) sau (?P<nume>...) (sintaxa originară din Python, suportată și în PHP). Rezultatul devine auto-documentat: $m['an'] sau match.groups.an.
Variante și sintaxă asociată
| Expresie / Simbol | Descriere |
|---|---|
(?<nume>...) |
Sintaxa standard modernă (JS ES2018+, PHP/PCRE, C#, Java) pentru un grup cu nume. |
(?P<nume>...) |
Sintaxa Python (acceptată și în PHP/PCRE) pentru definirea unui grup cu nume. |
(?'nume'...) |
Sintaxă alternativă validă în PCRE (PHP) și .NET. |
$<nume> |
În JavaScript replace(): inserează valoarea capturată de grupul cu numele specificat. |
\k<nume> sau (?P=nume) |
Referință înapoi (backreference) în interiorul aceleiași expresii către grupul cu nume. |
Exemple
Exemplul 1: Parsarea unei linii de log în PHP și JavaScript cu grupuri cu nume
Extragem data, nivelul de severitate și mesajul direct în chei asociative clare.
// PHP:
$log = "[2026-10-23] ERROR: Conexiunea la baza de date a eșuat";
$re = '/^\[(?<data>\d{4}-\d{2}-\d{2})\]\s+(?<nivel>[A-Z]+):\s+(?<mesaj>.+)$/';
preg_match($re, $log, $m);
// În JavaScript (ES2018+):
// const { data, nivel, mesaj } = log.match(re).groups;
Potriviri găsite (Matches)
$m['data'] => "2026-10-23"
$m['nivel'] => "ERROR"
$m['mesaj'] => "Conexiunea la baza de date a eșuat"
Exemplul 2: Înlocuire lizibilă cu $<nume> în JavaScript
În loc de $1 și $2, folosim $<prenume> și $<nume> în șirul de replace.
// JavaScript:
const input = "Popescu, Andrei";
const formatat = input.replace(
/^(?<nume>[A-Za-zăîâșțĂÎÂȘȚ]+),\s*(?<prenume>[A-Za-zăîâșțĂÎÂȘȚ]+)$/u,
"$<prenume> $<nume>"
);
Potriviri găsite (Matches)
"Andrei Popescu"
Greșeli frecvente
- În PHP (
preg_match), un grup cu nume(?<an>\d{4})populează în$matchesatât cheia string ($matches['an']), cât și cheia numerică ($matches[1]), dublând dimensiunea array-ului dacă facicount($matches). - Folosirea cratimelor în numele grupului (ex.
(?<cod-postal>\d{6})): numele grupurilor trebuie să fie identificatori valizi (doar litere, cifre și underscore, fără să înceapă cu o cifră:(?<cod_postal>\d{6})).
Simboluri și rețete înrudite
(...) (grup de captură): Grupează mai multe elemente într-o singură unitate și salvează (capturează) subșirul potrivit pentru extragere sau înlocuire.(?:...) (grup fără captură): Grupează elementele pentru aplicarea cuantificatorilor sau a operatorului |, fără a salva subșirul în lista de capturi.\1 și \k<nume> (backreference): Refolosește în interiorul aceleiași expresii regulare textul exact care a fost capturat anterior de un grup.RegEx în JavaScript, PHP (preg_match) și Python (re): Ghid comparativ pentru apelarea expresiilor regulare în cele mai populare 3 limbaje: testare, extragere, înlocuire și split.
Întrebări & Exemple de Cod:
(?<nume>…) (grup cu nume)Ai o nelămurire despre utilizarea comenzii
(?<nume>…) (grup cu nume)sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.