Ce face (...) (grup de captură)
Parantezele rotunde (...) îndeplinesc două roluri simultane în RegEx: în primul rând, grupează mai multe caractere sau subexpresii într-o singură unitate logică (astfel încât să poți aplica un cuantificator ca + sau ? ori operatorul | asupra întregului grup).
În al doilea rând, ele creează un grup de captură numerotat (1, 2, 3…, în ordinea parantezelor deschise de la stânga la dreapta). Motorul RegEx memorează separat textul potrivit de fiecare paranteză, permițându-ți să extragi direct părțile componente (ex. ziua, luna și anul dintr-o dată) sau să le refolosești în funcțiile de replace prin $1, $2 (sau \1, \2).
Variante și sintaxă asociată
| Expresie / Simbol | Descriere |
|---|---|
(...) |
Definește un grup de captură numerotat automat (începând de la indexul 1). |
Indexul 0 ($matches[0]) |
Conține întotdeauna potrivirea completă a întregii expresii regulare. |
Indexul 1, 2... ($1, $2) |
Conține subșirurile capturate de primul, al doilea etc. set de paranteze (…). |
$& sau $0 |
În șirul de înlocuire (replace), reprezintă întreaga potrivire găsită. |
Exemple
Exemplul 1: Extragerea zilei, lunii și anului dintr-o dată calendaristică
Folosim 3 grupuri de captură (\d{4}), (\d{2}) și (\d{2}) pentru a separa componentele.
// PHP:
$text = "Factura a fost emisă pe 2026-10-23.";
if (preg_match('/(\d{4})-(\d{2})-(\d{2})/', $text, $m)) {
// $m[0] = "2026-10-23" (tot match-ul)
// $m[1] = "2026", $m[2] = "10", $m[3] = "23"
}
Potriviri găsite (Matches)
$m[0] => "2026-10-23"
$m[1] => "2026" (Anul)
$m[2] => "10" (Luna)
$m[3] => "23" (Ziua)
Exemplul 2: Reformatarea datelor din YYYY-MM-DD în DD.MM.YYYY cu $1, $2, $3
În replace, referim grupurile capturate prin $3.$2.$1 pentru a inversa ordinea.
// JavaScript:
const text = "Perioada: 2026-05-01 - 2026-05-15";
const ro = text.replace(/(\d{4})-(\d{2})-(\d{2})/g, "$3.$2.$1");
Potriviri găsite (Matches)
"Perioada: 01.05.2026 - 15.05.2026"
Greșeli frecvente
- Punerea cuantificatorului în exteriorul parantezei (ex.
(\d)+în loc de(\d+)): în(\d)+, grupul 1 se suprascrie la fiecare iterație și la final va conține doar ultima cifră a numărului! - Folosirea grupurilor de captură
(...)doar pentru grupare logică (fără a avea nevoie de valoarea capturată), ceea ce poluează array-ul de rezultate și consumă memorie suplimentară. Când nu ai nevoie de captură, folosește(?:...).
Simboluri și rețete înrudite
(?:...) (grup fără captură): Grupează elementele pentru aplicarea cuantificatorilor sau a operatorului |, fără a salva subșirul în lista de capturi.(?<nume>...) (grup cu nume): Asociază un nume descriptiv unui grup de captură pentru a accesa valoarea extrasă după cheie, nu doar după număr.\1 și \k<nume> (backreference): Refolosește în interiorul aceleiași expresii regulare textul exact care a fost capturat anterior de un grup.| (operatorul SAU / alternare): Permite alegerea între două sau mai multe expresii alternative (SAU logic în RegEx).