Есть строка "123456789". Есть вот такая регулярка
https://regex101.com/r/05cZ3B/2Данная регулярка ищет позиции, с которых начинаются совпадения хотя бы одной группы из трех цифр. То есть каждая позиция в заданной строке, за исключением последних двух вызывает совпадение. Для проверки я делаю вставку запятых и получаю ",1,2,3,4,5,6,789". Я верно понимаю как оно работает?
А теперь я добавлю в конец границу слова вот так
https://regex101.com/r/05cZ3B/1/При вставке запятых получается ",123,456,789"
Вопрос: почему добавление границы слова так влияет на поиск, что теперь ищется группы по три символа подряд (теперь эти группы не пересекаются)? Почему такое выражение не находит позиции второго, третьего, пятого, шестого и т.д. символов? Впечатление, что оно перестало возвращаться к первой позиции и стало захватывать группы по три символа.
Это кусок примера из Фридла, но объяснения почему оно так работает мне не понятно. Вот цитата оттуда
Цитата:
Группа из трех цифр определяется выражением \d\d\d. Заключим ее в конструкцию (…)+, чтобы совпадение могло состоять из нескольких групп, и завершим метасимволом $, чтобы гарантировать отсутствие символов после совпадения.
-- 21.07.2019, 20:08 --Мне подсказали.
Во втором случае оно работает так, потому что ищет группы по три символа сколько может и потом конец слова. Не знаю как оно внутри устроено, но думаю оно пытается искать со второй и третьей позиций, но просто не может найти соответствия для групп из трёх символов и конца слова. В этих случаях перед концом слова остаются ещё символы, которые не соответствуют шаблону.