Passer au contenu principal
eLearner.app
Module 4 · Leçon 3 sur 415/32 dans le cours~10 min
Leçons du module (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

Exercice#regex.m4.l3.e1
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Esercizio di ripasso

Exercice#regex.m4.l3.e2
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Sfida aggiuntiva

Exercice#regex.m4.l3.e3
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives