gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как делают замену на временную переменную в регулярных выражениях?

Я хочу вот что сделать - чтобы после того, как отработал preg_replace_callback - в переменной $replacements были пары ключ значение.

В локальной области видимости замыкания функция работает (внутри $replacements содержит все что нужно). Стоит вывести снаружи - значения пропадают. Не знаю, как передать по ссылке правильно, она скорее всего работает с копией переменной, а не с ней самой.

$total = '';
$pattern = "/<([a-z][a-z0-9_]+):([^:\r\n]+)>/";
$replacements = array();
$total = preg_replace_callback($pattern, function ($matches) use ($replacements)  {
  static $counter = 1;
  $name = '@' . $counter;
  $value = '(?P<' . $matches[1] . '>' . $matches[2] . ')';
  $replacements[$name] =& $value; // ???????????????????
  $counter++;
  return $name;
}, $route);
print_r($replacements); // Array () - ???????????
exit();
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
gzhegow
@gzhegow Автор вопроса
aka "ОбнимиБизнесмена"
Поспешил, людей насмешил. Самое главное то не проверил и оно как раз заработало:
preg_replace_callback($pattern, function ($matches) use (&$replacements)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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