Определить, какие части регекса совпадали с данным отрезком строки

Issue #420 new
Oleg Sychev repo owner created an issue

В ходе анализа задачи выяснилось, что по имеющимся после окончания совпадения данным - не только в match_result, но и в execution_state - решить задачу невозможно.

Проблема в квантификаторах, дочерние узлы которых запоминают только последнее совпадение. Соответственно, если под квантификатором находится что-то нетривиальное, квантификатор совпал несколько раз и пользователь выделил отрезок строки в непоследнем совпадении, то по оставшимся после матчинга данным определить, что именно из дочерних узлов совпало невозможно.

Надо либо хранить все копии совпадений (что затраты памяти), либо ввести в матчинг дополнительный параметр - границы в строке, чтобы он в дереве отмечал узлы, с которыми происходило совпадение.

Валерий - ваше мнение относительно двух предложенных вариантов?

Comments (2)

  1. Valeriy Streltsov

    Первый вариант точно плохой, потому что там еще и стек execution state'ов для рекурсии. В execution state вообще лучше не трогать структуру данных.

  2. Oleg Sychev reporter

    Мне тоже второй больше нравится. Вам будет сложно как-нибудь найти время доделать учет такого параметра, если он будет передан? Передачу организуем, над юнит-тестами подумаем тоже...

  3. Log in to comment