Как можно эффективно сопоставить одну входную строку с любым количеством регулярных выражений?
Один из сценариев, где это может быть полезно, - это REST web Сервисы. Предположим, я придумал несколько шаблонов URL для открытого интерфейса веб-службы REST:
/ user / with-id /
{userId}
/ user / with-id /
{userId}
/ profile
/ user / with-id /
{userId}
/ preferences
/ users
/ users / who-signed-up-on /
{date}
/ users / who-signed-up-between /
{fromDate}
/ и /
{toDate}
где {…}
являются именованными заполнителями (например, группами захвата регулярных выражений).
Примечание: этот вопрос не о том, хорошо ли спроектирован вышеуказанный интерфейс REST или нет. (Вероятно, это не так, но это не должно иметь значения в контексте этого вопроса.)
Можно предположить, что заполнители обычно не появляются в самом начале шаблона (но они могут). Также можно с уверенностью предположить, что ни одна строка не может соответствовать более чем одному шаблону.
Теперь веб-служба получает запрос. Конечно, можно последовательно сопоставить запрошенный URI с одним шаблоном URL, затем со следующим и так далее; но это, вероятно, не будет хорошо масштабироваться для большего количества шаблонов, которые необходимо проверить.
Существуют ли какие-либо эффективные алгоритмы для этого?
Входные данные:
Выходные данные: