2016-12-21 3 views
0

Веб-фреймворки направляют входящие запросы на конечные точки, сопоставляя путь запроса с рядом регулярных выражений. Итак, какая бы хорошая/лучшая структура данных использовалась для хранения пути запроса (с помощью подстановочных знаков).Структура данных для маршрутов приложений

И если какой-либо такой пакет (на любом языке)?

ответ

0

Регулярные выражения поддерживают гораздо больше, чем подстановочные знаки. A trie обычно можно использовать для сопоставления префиксов, если они уникальны, но для соответствия логическому ИЛИ списка альтернатив, посмотрите на что-то вроде Aho-Corasick algorithm.

Однако эти алгоритмы/структуры данных учитывают только статическую часть поиска, то есть сопоставляют предсказуемые строки. Для сопоставления подстановочных знаков, если вы разрешаете произвольное обратное отслеживание, вы можете получить патологическую производительность, а это означает, что использование полной системы регулярных выражений в маршрутном маршрутизаторе, вероятно, не является хорошей идеей, поскольку это может привести к отказу в обслуживании.

Откажитесь от this write up о том, как Go преобразует регулярные выражения (хотя и ограниченной формы) в NFA с использованием Thmopson's construction.

Смежные вопросы