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.
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
- Leggibilita': chi legge capisce subito che quel gruppo serve solo per struttura, non per estrarre un valore.
- Performance: l'engine non deve memorizzare il match del gruppo.
- 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
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.
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
Trova ogni ripetizione di `ab` come singolo match, ma SENZA catturare il gruppo (visto che ti serve solo l'intero match).
Mostra suggerimento
Stessa sintassi della scorsa lezione, ma con (?:ab)+ invece di (ab)+.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Trova le cifre dei prezzi seguite opzionalmente da decimali racchiusi in un gruppo non-cattura, es. `100` o `100.50`.
Mostra suggerimento
Uso di (?:\.\d{2})? per rendere opzionale la parte decimale senza catturarla.
Soluzione disponibile dopo 3 tentativi