Перейти до основного вмісту
Модуль 4 · Урок 3 із 415/32 у курсі~10 min
Модульні уроки (3/4)

Групи без захоплення: `(?:...)`

Часто дужки потрібні лише для групування (кількісного визначення, чергування) і НЕ видобувати значення. У цьому випадку використовуйте non-capturing версія: (?:...). Він працює так само, як і (...), але не створює пронумерована група.

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?) групує схему для застосування квантифікатора ?, але ми не зацікавлений у видобуванні https як групи: група 1 є безпосередньо домен.

Навіщо це використовувати

  1. Читабельність: читач відразу розуміє, що група існує лише для структуру, а не для отримання значення.
  2. Продуктивність: двигун не повинен зберігати відповідність групи.
  3. Чиста нумерація: нумеровані групи залишаються узгодженими «інформація, яка мені дійсно потрібна», без втручання.

Оптимізація з групами без захоплення

Використання (?:...) повідомляє механізму застосовувати правила групування та кванторів, не витрачаючи пам’ять на збереження проміжних результатів відповідності. Це настійно рекомендується у важких циклах або дуже довгій обробці тексту.

Спробуйте

вправи#regex.m4.l3.e1
Спроби: 0Завантаження…

Витягніть домен (`example.com`, `test.org`…) із кожної URL-адреси в тексті. Використовуйте `(?:https?)` для протоколу (його не потрібно записувати) і одну групу для домену.

Завантаження редактора…
Показати підказку

Змініть першу групу з (https?) на (?:https?): не потрібно її захоплювати, вам потрібен лише домен.

Рішення доступне після 3 спроб

Повторна вправа

вправи#regex.m4.l3.e2
Спроби: 0Завантаження…

Знайдіть кожне повторення `ab` як окремий збіг, але БЕЗ захоплення групи (оскільки вам потрібен лише весь збіг).

Завантаження редактора…
Показати підказку

Той самий синтаксис, що й у попередньому уроці, але з (?:ab)+ замість (ab)+.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#regex.m4.l3.e3
Спроби: 0Завантаження…

Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.

Завантаження редактора…
Показати підказку

Використовувати (?:\\.\\d{2})? щоб зробити десяткову частину необов’язковою без її захоплення.

Рішення доступне після 3 спроб