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.
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
- Lizibilitate: cititorul înțelege imediat că grupul este acolo doar pentru structura, nu pentru a extrage o valoare.
- Performanță: motorul nu trebuie să stocheze meciul grupului.
- 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ă
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.
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
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).
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ă
Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.
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