Пишу свой роутер для кастомной маршрутизации на сайте. Возникла такая проблема:
При работе следующего скрипта у меня не выводятся данные из строки после применения регулярного выражения в preg_replace:
$pattern_regex = preg_replace("/\{(.*?)\}/", "(?P<$1>[\w-]+)", $pattern);
$pattern_regex = "#^" . $pattern_regex . "$#";
var_dump($pattern_regex);
Данные которые входят в переменную $pattern:
/home
/user
/user/profile/{id}
/user/{id}/edit
Должно быть:
string(9) "#^/home$#"
string(9) "#^/user$#"
string(32) "#^/user/profile/(?P<id>[\W-]+)$#"
string(29) "#^/user/(?P<id>[\W-]+)/edit$#"
Выходит следующее:
string(9) "#^/home$#"
string(9) "#^/user$#"
string(32) "#^/user/profile/(?P[\W-]+)$#"
string(29) "#^/user/(?P[\W-]+)/edit$#"
Думал я где то косячу, нашёл в интернете онлайн песочницу для использования preg_replace, там всё работает как по маслу, а у меня из-за вставки по бокам символов: "<" и ">" пропадает элемент который должен вписаться при выходе из строки, так ещё и сами символы не выходят даже. Если я их убираю или оставляю пробелы между ними и строчной переменной $1, то всё нормально, в чём суть этого прикола.
Смотрю видео одно из участников PHP Skills вроде как, у него с этими регулярными выражения нет таких приколов.