Модульні уроки (1/4)
Позитивний перегляд: `(?=...)`
Позитивний прогноз (?=...) є твердженням нульової ширини:
він перевіряє, чи певний шаблон відповідає поточній позиції, але **
не використовувати** ці символи.
Pattern: \d+(?= euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^^ ^^Попередній перегляд (?= euro) вимагає, щоб за цифрами слідував euro, але
збіг включає лише цифри. 75 dollari не збігається (ні euro).
Чому "нульова ширина"
Подумайте про прогноз як про умову на посаді, а не як про частина матчу:
- Матч зупиняється до перегляду вперед.
- Позиція «після матчу» є початком тексту, перевіреного пошуком вперед.
- Наступна спроба матчу з прапором
gпродовжиться з цього моменту.
Це робить його ідеальним для вилучення значень без їх контексту: цін без валюти, слова перед розділовим знаком тощо.
Функції Lookahead і сканування нульової ширини
Позитивний попередній перегляд (?=...) гарантує, що вказаний шаблон відповідає поточній точці, але сканування поновлюється з позиції перед попереднім переглядом. Це запобігає «використанню» частин тексту, які можуть знадобитися для наступних збігів.
Спробуйте
Витягніть ТІЛЬКИ цифри цін у євро (послідовність цифр, за якою йде «євро»). У матчі немає валюти.
Показати підказку
Перемістіть «євро» всередину попереднього перегляду (?= євро): рядок не буде частиною збігу.
Рішення доступне після 3 спроб
Повторна вправа
Знайдіть кожне слово, після якого стоїть двокрапка `:` (але без двокрапки у відповідності).
Показати підказку
Та сама логіка: `:` не в матчі, але це умова позиції.
Рішення доступне після 3 спроб
Додатковий виклик
Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.
Показати підказку
Перемістіть \\( (розкриті круглі дужки) всередину позитивного перегляду вперед (?=...).
Рішення доступне після 3 спроб