@AlodYk

При работе с preg_replace, не выходит элемент который я хочу вытащить из строки, в чём может быть проблема?

Пишу свой роутер для кастомной маршрутизации на сайте. Возникла такая проблема:
При работе следующего скрипта у меня не выводятся данные из строки после применения регулярного выражения в 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 вроде как, у него с этими регулярными выражения нет таких приколов.
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
@dodo512
echo "<xmp>";
var_dump($pattern_regex);
echo "</xmp>";
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro Куратор тега PHP
На вид всё нормально, код рабочий и выводит то что ожидается
https://3v4l.org/X3JQA

Думаю проблема в том что результаты работы кода смотрите в браузере, и там <id> обрабатываются как html-тег и поэтому их не видно.
Для того чтобы убедиться в этом можно открыть исходный код страницы (Ctrl+U) и увидеть есть ли там <id> на самом деле
Ответ написан
Ваш ответ на вопрос

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

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