Direkt zum Hauptinhalt springen
eLearner.app
Modul 4 · Lektion 3 von 415/32 im Kurs~10 min
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.

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?) 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

  1. Lesbarkeit: Der Leser versteht sofort, dass die Gruppe nur für die Struktur da ist, nicht um einen Wert zu extrahieren.
  2. Performance: Die Engine muss den Treffer der Gruppe nicht speichern.
  3. 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

Übung#regex.m4.l3.e1
Versuche: 0Wird geladen…

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.

Editor wird geladen…
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

Übung#regex.m4.l3.e2
Versuche: 0Wird geladen…

Finde jede Wiederholung von `ab` als einen einzigen Treffer, aber OHNE die Gruppe zu erfassen (da du nur den gesamten Treffer benötigst).

Editor wird geladen…
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

Übung#regex.m4.l3.e3
Versuche: 0Wird geladen…

Finde Preisziffern, optional gefolgt von Dezimalstellen innerhalb einer nicht-erfassenden Gruppe, z. B. `100` oder `100.50`.

Editor wird geladen…
Hinweis anzeigen

Verwende (?:\.\d{2})?, um den Dezimalteil optional zu machen, ohne ihn zu erfassen.

Lösung nach 3 Versuchen verfügbar