Определить, какие части регекса совпадали с данным отрезком строки
В ходе анализа задачи выяснилось, что по имеющимся после окончания совпадения данным - не только в match_result, но и в execution_state - решить задачу невозможно.
Проблема в квантификаторах, дочерние узлы которых запоминают только последнее совпадение. Соответственно, если под квантификатором находится что-то нетривиальное, квантификатор совпал несколько раз и пользователь выделил отрезок строки в непоследнем совпадении, то по оставшимся после матчинга данным определить, что именно из дочерних узлов совпало невозможно.
Надо либо хранить все копии совпадений (что затраты памяти), либо ввести в матчинг дополнительный параметр - границы в строке, чтобы он в дереве отмечал узлы, с которыми происходило совпадение.
Валерий - ваше мнение относительно двух предложенных вариантов?
Comments (2)
-
-
reporter Мне тоже второй больше нравится. Вам будет сложно как-нибудь найти время доделать учет такого параметра, если он будет передан? Передачу организуем, над юнит-тестами подумаем тоже...
- Log in to comment
Первый вариант точно плохой, потому что там еще и стек execution state'ов для рекурсии. В execution state вообще лучше не трогать структуру данных.