(…) (grup de captură) în Expresii Regulare (RegEx)

Grupuri și referințe PCRE / ECMAScript / POSIX

Grupează mai multe elemente într-o singură unitate și salvează (capturează) subșirul potrivit pentru extragere sau înlocuire.

Tipar RegEx
(pattern)   |   (d{4})-(d{2})-(d{2})   |   $1, $2

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