Lektionen des Moduls (3/4)
Nicht-erfassende Gruppen: `(?:...)`
Oft werden Klammern nur zum Gruppieren (Quantifizieren, Alternieren) und NICHT zum Extrahieren des Wertes benötigt. Verwende in diesem Fall die nicht-erfassende (non-capturing) Version: (?:...). Sie funktioniert identisch mit (...), erstellt aber keine nummerierte Gruppe.
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?) gruppiert das Schema, um den Quantifizierer ? anzuwenden, aber wir sind nicht daran interessiert, https als Gruppe zu extrahieren: Gruppe 1 ist direkt die Domain.
Warum es verwendet werden sollte
- Lesbarkeit: Der Leser versteht sofort, dass die Gruppe nur für die Struktur da ist, nicht um einen Wert zu extrahieren.
- Performance: Die Engine muss den Treffer der Gruppe nicht speichern.
- Saubere Nummerierung: Nummerierte Gruppen bleiben auf "Informationen, die ich tatsächlich benötige" ausgerichtet, ohne Interferenzen.
Optimierung mit nicht-erfassenden Gruppen
Die Verwendung von (?:...) teilt der Engine mit, Gruppierungs- und Quantifizierungsregeln anzuwenden, ohne Speicherplatz für die Speicherung von Zwischenergebnissen zu verschwenden. Dies wird bei rechenintensiven Schleifen oder sehr langen Texten dringend empfohlen.
Probiere es aus
Extrahiere die Domain (`example.com`, `test.org`…) aus jeder URL im Text. Verwende `(?:https?)` für das Protokoll (keine Erfassung erforderlich) und eine einzelne Gruppe für die Domain.
Hinweis anzeigen
Ändere die erste Gruppe von (https?) in (?:https?): Sie muss nicht erfasst werden, du möchtest nur die Domain.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Finde jede Wiederholung von `ab` als einen einzigen Treffer, aber OHNE die Gruppe zu erfassen (da du nur den gesamten Treffer benötigst).
Hinweis anzeigen
Gleiche Schreibweise wie in der vorherigen Lektion, aber mit (?:ab)+ anstelle von (ab)+.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Finde Preisziffern, optional gefolgt von Dezimalstellen innerhalb einer nicht-erfassenden Gruppe, z. B. `100` oder `100.50`.
Hinweis anzeigen
Verwende (?:\.\d{2})?, um den Dezimalteil optional zu machen, ohne ihn zu erfassen.
Lösung nach 3 Versuchen verfügbar