Выделение нескольких частей регулярного выражения одновременно

Issue #411 new
Oleg Sychev repo owner created an issue

До сих пор надобности в подобном не возникало, но с реализацией выделения в тестовых строках - будет. Например для регекса ab(cd|ef|gh)xx и строки abefxx при выделении всей строки необходимо будет выделить три куска регекса, иначе такая функция будет бессмысленной. Обратите внимание что на сервер по прежнему будет передаваться один кусок (в строке), а вот с сервера будет приходить регекс/дерево/автомат/описание уже с несколькими выделенными элементами.

Первый шаг к этому - реализовать возможность такого выделения в самом AJAX-обмене между сервером и клиентом. Если где-то (например для текста регекса - Валерий, это делали вы, подскажите как там?) с сервера передаются координаты в регексе или узлы дерева - то они должны быть массивом элементов (даже если реально кусок один - массив из одного элемента). Аналогично код дерева, графа и описания должен иметь возможность принимать выделение в виде массива вершин.

Comments (4)

  1. Valeriy Streltsov

    Насколько я понял из описания, смотрите использование qtype_preg_node::node_by_regex_fragment(). Одиночный вызов надо заменить на вызов в цикле.

  2. Valeriy Streltsov

    Ещё вот. Судя по всему номер -2 используется для выделения. Автомату потом надо будет знать диапазон таких номеров вместо одного номера.

  3. Oleg Sychev reporter

    Валерий, вы скорее всего не поняли до конца. Речь не о передачи с клиента нескольких узлов. Речь о передаче отрезка строки, на которую матчер должен вернуть набор узлов, с которыми она совпадала - при этом игнорируя ветки альтернатив и пустые квантификаторы, которые не работали. На вход сервера идет по прежнему один кусок, но на выход - в выделение цветом в тексте регекса, выделение в дереве и графе и т.д. - на выход получается несколько узлов.

  4. Valeriy Streltsov

    Ну вот я дал ссылку на qtype_preg_fa_exec_state::to_matching_results(), можно рядом сделать похожий метод который примет интересующие границы в строке и вернет данные по всем subpatterns, а не только subexpressions, которые совпали (имели индексы совпадений в пределах переданных на вход).

  5. Log in to comment