#php #regex #altorouter
Вопрос:
Я использую AltoRouter 1.2.0 в качестве PHP-маршрутизатора.
Я хотел бы использовать необязательный параметр («страница») и сделать необязательным знак минус в URL-адресе.
Если номер страницы равен 2, URL-адрес должен содержать идентификатор потока и номер страницы, разделенные знаком минус.
/forum/24981-2/my-super-forum-thread
Если номер страницы один, параметр страницы не должен находиться в URL-адресе, а URL-адрес должен быть примерно таким
/forum/24981/my-super-forum-thread
(без номера страницы, без знака минус)
Дополнительные параметры AltoRouter зависят от этого регулярного выражения, как вы можете видеть в документе :
'' => '[^/.] '
Это делает косую черту и точку необязательными в URL-адресе, это работает так, как должно.
Я бы также хотел сделать знак минус необязательным.
Моя декларация маршрута в настоящее время выглядит следующим образом
$router->map('GET', '/forum/[i:thread_id]-[:page]?/[s:slug]', 'forum#getThread', 'forum_getThread');
Я пробовал много разных регулярных выражений, например, добавлял знак минус в начале или в конце скобок, но безуспешно.
Любая помощь приветствуется, я проверил много вопросов по SO относительно знака минус в регулярном выражении, но не смог этого сделать. Заранее спасибо за любые советы.
Комментарии:
1. Если вы сделаете знак минус необязательным, как маршрутизатор должен знать, где заканчивается thread_id и начинается страница?
2. @vixducis если я заменю знак минус точкой или косой чертой, эти специальные символы станут необязательными, если номер страницы не указан, в соответствии с вставленным мной регулярным выражением. Я просто хочу такого же поведения со знаком минус.
3.
[^/.]
не делает косую черту и точку «необязательными», они улавливают все до косой черты, точки или конца строки. (в стороне, избегать точки в классе символов бесполезно).4. Вы пробовали что-то подобное
'/forum/[i:thread_id]-?[i:page]?/[s:slug]'
?5. @CasimiretHippolyte Спасибо за помощь. Я только что попробовал, но ничего не вышло. За знаком минус теперь следует знак вопроса в URL-адресе, вот и все.