Просмотр вперёд
Есть такое регулярное выражение:
abc(?=d)e
Есть такая строка: abcde.
Почему регулярка не срабатывает? abc нашли, далее просматриваем вперёд, d есть, и в конце e.
Источник: Stack Overflow на русском
Есть такое регулярное выражение:
abc(?=d)e
Есть такая строка: abcde.
Почему регулярка не срабатывает? abc нашли, далее просматриваем вперёд, d есть, и в конце e.
Смотрите, что происходит для регулярки abc(?=d)e
по строке "abcde"
.
"abcde"
. Результат: <пустой>
."de"
. Результат: "abc"
.'d'
- (?=d)
. Просмотр вперед не двигает курсор по входной строке. Вход: "de"
. Результат: "abc"
.'e'
из входной строки, но у нас на очереди еще только 'd'
. Матчинг останавливается, расходимся.То, что вы, возможно, ожидаете получить, можно получить регулярным выражением abc(?=d).e
.
Точка выберет из входной строки букву 'd'
, затем отработает буква 'e'
и поиск успешно закончится, вернув "abcde"
.
Правда, того же результата можно было добиться и просто выражением abcde
. Непонятно, зачем вам здесь просмотр вперед. Он обычно нужен, когда за искомым выражением что-то должно быть, но попасть в результат не должно.