JaxAdam
@JaxAdam
Junior Full-Stack Developer

Кто может помочь с регулярками и preg_replace?

$route = "#^cabinet/yes/{id_course:[\w\d\-]+}/{id_member:[\w\d\-]+}$#"
$route = preg_replace('/{([a-z\-]+):([^\}]+)}/', '(?P<\1>\2)', $route);

Хочу получить строку:
#^cabinet/yes/(?P[\w\d\-]+)/(?P[\w\d\-]+)$#
А получаю то же самое что и в начале:
#^cabinet/yes/{id_course:[\w\d\-]+}/{id_member:[\w\d\-]+}$#

Что я делаю потом?
$route = "#^cabinet/yes/{id_course:[\w\d\-]+}/{id_member:[\w\d\-]+}$#"
$route = preg_replace('/{([a-z\-]+):([^\}]+)}/', '(?P<\1>\2)', $route);
$url = trim($_SERVER["REQUEST_URI"], '/');
preg_match($route, $url, $matches);

$mathces['id_course'] и $matches['id_member'] я закину в параметры к роуту.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
bitniks
@bitniks
Go/PHP/Symfony developer
В регулярке в первой группе символов не хватает нижнего подчеркивания. Добавил
{([a-z\-_]+):([^\}]+)}

Результат немного не тот, что указан в вопросе, но кажется это и ожидалось
#^cabinet/yes/(?P<id_course>[\w\d\-]+)/(?P<id_member>[\w\d\-]+)$#

sandbox.onlinephpfunctions.com/code/85f689a7344bf6...

Код полностью
sandbox.onlinephpfunctions.com/code/05371ae2ba4cd6...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы