Przejdź do głównej treści
eLearner.app
Moduł 4 · Lekcja 3 z 415/32 w kursie~10 min
Lekcje modułu (3/4)

Grupy bez przechwytywania: `(?:...)`

Często nawiasy są potrzebne tylko do grupowania (kwantyfikowania, stosowania alternatyw), a NIE do wyodrębniania wartości. W takim przypadku należy użyć wersji nieprzechwytującej: (?:...). Działa ona identycznie jak (...), ale nie tworzy numerowanej grupy.

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"

Zapis (?:https?) grupuje schemat w celu zastosowania kwantyfikatora ?, ale nie jesteśmy zainteresowani wyodrębnieniem https jako grupy: grupa 1 to bezpośrednio domena.

Dlaczego warto jej używać

  1. Czytelność: czytelnik od razu rozumie, że grupa służy jedynie strukturze, a nie wyodrębnieniu wartości.
  2. Wydajność: silnik nie musi przechowywać dopasowania grupy w pamięci.
  3. Czysta numeracja: grupy numerowane pozostają powiązane z "informacjami, których naprawdę potrzebuję", bez zbędnych zakłóceń.

Optymalizacja za pomocą grup nieprzechwytujących

Użycie zapisu (?:...) informuje silnik, aby zastosował reguły grupowania i kwantyfikatorów bez marnowania pamięci na przechowywanie pośrednich wyników dopasowania. Jest to wysoce zalecane w ciężkich pętlach lub przy przetwarzaniu bardzo długich tekstów.

Spróbuj sam

Ćwiczenie#regex.m4.l3.e1
Próby: 0Ładowanie...

Wyodrębnij domenę (`example.com`, `test.org`…) z każdego adresu URL w tekście. Użyj `(?:https?)` dla protokołu (nie ma potrzeby go przechwytywać) i pojedynczej grupy dla domeny.

Ładowanie edytora...
Pokaż wskazówkę

Zmień pierwszą grupę z (https?) na (?:https?): nie ma potrzeby jej przechwytywania, chcesz tylko domenę.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m4.l3.e2
Próby: 0Ładowanie...

Znajdź każde powtórzenie `ab` jako pojedyncze dopasowanie, ale BEZ przechwytywania grupy (ponieważ potrzebujesz tylko całego dopasowania).

Ładowanie edytora...
Pokaż wskazówkę

Taka sama składnia jak w poprzedniej lekcji, ale z użyciem (?:ab)+ zamiast (ab)+.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m4.l3.e3
Próby: 0Ładowanie...

Znajdź cyfry ceny, po których opcjonalnie występują części dziesiętne wewnątrz grupy nieprzechwytującej, np. `100` lub `100.50`.

Ładowanie edytora...
Pokaż wskazówkę

Użyj (?:\.\d{2})?, aby uczynić część dziesiętną opcjonalną bez jej przechwytywania.

Rozwiązanie dostępne po 3 próbach