Модульні уроки (3/4)
Групи без захоплення: `(?:...)`
Часто дужки потрібні лише для групування (кількісного визначення, чергування)
і НЕ видобувати значення. У цьому випадку використовуйте non-capturing
версія: (?:...). Він працює так само, як і (...), але не створює
пронумерована група.
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 є безпосередньо
домен.
Навіщо це використовувати
- Читабельність: читач відразу розуміє, що група існує лише для структуру, а не для отримання значення.
- Продуктивність: двигун не повинен зберігати відповідність групи.
- Чиста нумерація: нумеровані групи залишаються узгодженими «інформація, яка мені дійсно потрібна», без втручання.
Оптимізація з групами без захоплення
Використання (?:...) повідомляє механізму застосовувати правила групування та кванторів, не витрачаючи пам’ять на збереження проміжних результатів відповідності. Це настійно рекомендується у важких циклах або дуже довгій обробці тексту.
Спробуйте
Витягніть домен (`example.com`, `test.org`…) із кожної URL-адреси в тексті. Використовуйте `(?:https?)` для протоколу (його не потрібно записувати) і одну групу для домену.
Показати підказку
Змініть першу групу з (https?) на (?:https?): не потрібно її захоплювати, вам потрібен лише домен.
Рішення доступне після 3 спроб
Повторна вправа
Знайдіть кожне повторення `ab` як окремий збіг, але БЕЗ захоплення групи (оскільки вам потрібен лише весь збіг).
Показати підказку
Той самий синтаксис, що й у попередньому уроці, але з (?:ab)+ замість (ab)+.
Рішення доступне після 3 спроб
Додатковий виклик
Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.
Показати підказку
Використовувати (?:\\.\\d{2})? щоб зробити десяткову частину необов’язковою без її захоплення.
Рішення доступне після 3 спроб