Как получить доступ к совпадениям в preg_replace в качестве полезной переменной? Вот мой пример кода:
<?php $body = <<<EOT Thank you for registering at <!-- site_name --> Your username is: <!-- user_name --> <!-- signature --> EOT; $value['site_name'] = "www.thiswebsite.com"; $value['user_name'] = "user_123"; $value['signature'] = <<<EOT live long and prosper EOT; //echo preg_replace("/<!-- (#?\w+) -->/i", "[$1]", $body); echo preg_replace("/<!-- (#?\w+) -->/i", $value[$1], $body); ?>
Я продолжаю получать следующее сообщение об ошибке:
Ошибка анализа: синтаксическая ошибка, неожиданный «$», ожидающий T_STRING или T_VARIABLE в строке 18
Вышеупомянутая строка с надписью «[$ i]» отлично работает, когда переменная соответствия заключена в кавычки. Есть немного синтаксиса, который я пропускаю?
Например: echo preg_replace("/<!-- (#?\w+) -->/", '$1', $body);
Между прочим, модификатор /i
может нанести вред только шаблону, без буквенных букв.
Вы не можете использовать preg_replace
таким образом. Он не определяет переменную с именем $1
которой вы можете взаимодействовать без внешней замены; строка '$1'
просто используется внутри для представления первого подвыражения шаблона.
Вам нужно будет использовать preg_match
чтобы найти строку, сопоставляемую (#?\w+)
, за которой следует preg_replace
чтобы заменить строку с соответствующим $value
:
$value['site_name'] = "www.thiswebsite.com"; $value['user_name'] = "user_123"; $value['signature'] = "something else"; $matches = array(); $pattern = "/<!-- (#?\w+) -->/i"; if (preg_match($pattern, $body, $matches)) { if (array_key_exists($matches[1], $value)) { $body = preg_replace($pattern, '<!-- ' . $value[$matches[1]] . ' -->', $body); } } echo $body;