Сначала я подумал, что не вижу хорошей оптимизации для этого процесса.
Однако, если у вас действительно большое количество регулярных выражений, вы можете разделить их (я не уверен, что это технически разделение).
Что я вам скажу, это:
Предположим, у вас есть 20 возможных URL, которые начинаются с user
:
/user/with-id/X
/user/with-id/X/preferences # instead of preferences, you could have another 10 possibilities like /friends, /history, etc
Тогда у вас также есть 20 возможных URL, начинающихся с users
:
/users/who-signed-up-on
/users/who-signed-up-on-between #others: /registered-for, /i-might-like, etc
И этот список продолжается для /products
, /companies
и т. Д. Вместо пользователей.
В этом случае вы можете использовать «многоуровневое» сопоставление .
Сначала сопоставьте начало строки. Вы подходите для /products
, /companies
, /users
, по одному за раз и игнорируя остальную часть строки. Таким образом, вам не нужно проверять все 100 возможностей.
После того, как вы узнаете, что URL-адрес начинается с /users
, вы можете сопоставить только возможные URL-адреса, начинающиеся с пользователей.
Таким образом, вы уменьшите количество ненужных совпадений. Вы не сопоставите строку для всех возможностей /procucts
.