Сделайте знак минус необязательным в регулярном выражении (AltoRouter 1.2.0)

#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-адресе, вот и все.