În expresiile regulate tradiționale, fiecare pereche de paranteze rotunde de captură primește un număr de grup secvențial unic, numărat de la stânga la dreapta. Când aveți formate alternative prin operatorul de alternare |, acest comportament creează o problemă majoră de procesare a datelor în codul aplicației.
Problema clasică a grupurilor multiple pe alternare
// Șablon standard:
^ (\d{4})-(\d{2})-(\d{2}) | (\d{2})/(\d{2})/(\d{4}) $
// Dacă textul este "2026-10-24":
// Grupul 1 = "2026" (An), Grupul 2 = "10" (Luna), Grupul 3 = "24" (Ziua).
// Grupurile 4, 5, 6 sunt NULL!
// Dacă textul este "24/10/2026":
// Grupurile 1, 2, 3 sunt NULL!
// Grupul 4 = "24" (Ziua), Grupul 5 = "10" (Luna), Grupul 6 = "2026" (An).
// În codul PHP sau Python, erai forțat să scrii:
// an = match[1] or match[6]; // Greoi și predispus la confuzii!
Soluția Elegantă: Branch Reset Groups (?|…)
Construcția (?|…) resetează numerotarea grupurilor la începutul fiecărei ramuri din interiorul său. Astfel, primul grup din fiecare ramură va fi întotdeauna Grupul 1, al doilea va fi Grupul 2 și așa mai departe!
Reutilizarea numerelor de grup cu Branch Reset
(?|
(\d{4}) - (\d{2}) - (\d{2}) # Ramura 1: Grupul 1=An, Grupul 2=Luna, Grupul 3=Ziua
|
(\d{2}) / (\d{2}) / (\d{4}) # Ramura 2: Grupul 1=Ziua, Grupul 2=Luna, Grupul 3=An
)
// Acum, indiferent ce format se potrivește, grupurile rezultate sunt garantat doar 1, 2 și 3!
Întrebări & Exemple de Cod:
Grupuri de Resetare a Ramurilor în RegEx ((?|…))Ai o nelămurire despre utilizarea comenzii
Grupuri de Resetare a Ramurilor în RegEx ((?|…))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.