Salt la conținutul principal
Modulul 4 · Lecția 3 din 415/32 în curs~10 min
Lecții din modul (3/4)

Grupuri necapturatoare: `(?:...)`

Adesea, parantezele sunt necesare doar pentru a grupa (cuantificare, alternare) și NU pentru a extrage valoarea. În acest caz, utilizați non-capturing versiunea: (?:...). Funcționează identic cu (...) dar nu creează un grup numerotat.

Code
Pattern: (?:https?)://(\w+\.\w+)
Sample:  https://example.com e http://test.org
Match e gruppi:
  match  = "https://example.com"   gruppo1 = "example.com"
  match  = "http://test.org"        gruppo1 = "test.org"

(?:https?) grupează schema pentru a aplica cuantificatorul ?, dar suntem nu sunt interesat să extragă https ca grup: grupul 1 este direct domeniu.

De ce să-l folosești

  1. Lizibilitate: cititorul înțelege imediat că grupul este acolo doar pentru structura, nu pentru a extrage o valoare.
  2. Performanță: motorul nu trebuie să stocheze meciul grupului.
  3. Numerotare curată: grupurile numerotate rămân aliniate cu „informații de care chiar am nevoie”, fără interferențe.

Optimizare cu grupuri care nu captează

Folosirea (?:...) îi spune motorului să aplice regulile de grupare și cuantificare fără a pierde memoria stocând rezultatele potrivirii intermediare. Acest lucru este foarte recomandat în bucle grele sau în procesarea textului foarte lungă.

Încearcă

Exercițiu#regex.m4.l3.e1
Încercări: 0Se încarcă…

Extrageți domeniul (`example.com`, `test.org`...) din fiecare adresă URL din text. Utilizați `(?:https?)` pentru protocol (nu este nevoie să-l capturați) și un singur grup pentru domeniu.

Se încarcă editorul...
Afișează indiciu

Schimbați primul grup din (https?) în (?:https?): nu este nevoie să-l capturați, doriți doar domeniul.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#regex.m4.l3.e2
Încercări: 0Se încarcă…

Găsiți fiecare repetare a lui `ab` ca o singură potrivire, dar FĂRĂ a captura grupul (deoarece aveți nevoie doar de întregul meci).

Se încarcă editorul...
Afișează indiciu

Aceeași sintaxă ca și lecția anterioară, dar cu (?:ab)+ în loc de (ab)+.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#regex.m4.l3.e3
Încercări: 0Se încarcă…

Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.

Se încarcă editorul...
Afișează indiciu

Folosiți (?:\\.\\d{2})? pentru a face partea zecimală opțională fără a o captura.

Soluție disponibilă după 3 încercări