Vai al contenuto
eLearner.app
Modulo 4 · Lezione 3 di 415/32 nel corso~10 min
Lezioni del modulo (3/4)

Gruppi non-cattura: `(?:...)`

Spesso le parentesi servono solo per raggruppare (quantificare, alternare) e NON per estrarre il valore. In quel caso usa la versione non-cattura: (?:...). Funziona identica a (...) ma non crea un gruppo numerato.

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?) raggruppa lo schema per applicare il quantificatore ?, ma non ci interessa estrarre https come gruppo: il gruppo 1 e' direttamente il dominio.

Perche' usarla

  1. Leggibilita': chi legge capisce subito che quel gruppo serve solo per struttura, non per estrarre un valore.
  2. Performance: l'engine non deve memorizzare il match del gruppo.
  3. Numerazione pulita: i gruppi numerati restano allineati con "informazioni che mi servono", senza interferenze.

Ottimizzare con i gruppi di non-cattura

Utilizzare (?:...) indica all'engine di applicare le regole di raggruppamento e quantificazione senza sprecare memoria per memorizzare i risultati intermedi. È caldamente raccomandato in cicli intensivi o testi molto lunghi.

Prova tu

Esercizio#regex.m4.l3.e1
Tentativi: 0Caricamento…

Estrai il dominio (`example.com`, `test.org`\u2026) da ogni URL nel testo. Usa `(?:https?)` per il protocollo (non serve catturarlo) e un solo gruppo per il dominio.

Caricamento editor…
Mostra suggerimento

Cambia il primo gruppo da (https?) a (?:https?): non serve catturarlo, ti basta solo il dominio.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m4.l3.e2
Tentativi: 0Caricamento…

Trova ogni ripetizione di `ab` come singolo match, ma SENZA catturare il gruppo (visto che ti serve solo l'intero match).

Caricamento editor…
Mostra suggerimento

Stessa sintassi della scorsa lezione, ma con (?:ab)+ invece di (ab)+.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m4.l3.e3
Tentativi: 0Caricamento…

Trova le cifre dei prezzi seguite opzionalmente da decimali racchiusi in un gruppo non-cattura, es. `100` o `100.50`.

Caricamento editor…
Mostra suggerimento

Uso di (?:\.\d{2})? per rendere opzionale la parte decimale senza catturarla.

Soluzione disponibile dopo 3 tentativi