mai62
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору unreal666 Цитата: Это скорее всего глюк самого компонента, т.к. (.*) работает нормально в отличие от (.)* | Это не глюк, это сработало ограничение. Библиотека устроена так, что использует рекурсивные функции. Это означает, что функция в процессе своей работы вызывает сама себя. Получается, что функция не закончив свое выполнение (не освободив ресурсы) вызывает себя, та в свою очередь опять вызывает себя и так много раз (как матрешки). Это дело сопровождается большим расходом ресурсов. Один из этих ресурсов - место в стэке. В стэке, кроме локальных переменных, хранятся адреса возврата из функций. Поэтому переполнение стэка может привести к непредсказуемому поведению программы. Глубина вложенности рекурсии (количество вложенных матрешек) зависит от входной строки и регулярного выражения. В последней версии библиотеки появилась возможность ограничить глубину вложенности рекурсии. В версии 095b2b я установил ограничение равным 500. В версии 095b3b сделал 300 (чтобы уменьшить расход памяти). Такое ограничение оказалось слишком жестким. Когда я поставил 500, то правило с предыдущей страницы стало работать. Видимо остановлюсь пока на значении 1000. К сожалению, предсказать или рассчитать достаточно ли этого не могу. |