Как найти «маркер» в строке и заменить его на другую строку?
Доброго дня!
Есть необходимость реализовать на сайте вывод листа из книги Excel в виде html таблицы.
Например, пользователь пишет описание раздела в текстовой форме, и в каком-то месте описания ему необходимо вывести таблицу, для этого он вставляет маркер вида: #PRINT_TABLE_!LIST_NUM!>#, где !LIST_NUM! номер листа в Excel, который он хочет вывести, получается к примеру #PRINT_TABLE_5#.
Соответственно, нужен алгоритм, который перед выдачей описания раздела во фронтенд, будет проверять текст на наличие подобных "маркеров", и заменять их на html таблицы.
Собственно вопрос, каким образом найти в тексте "маркер" #PRINT_TABLE_5#, вытащить из него номер таблицы, и подставить на его место уже сгенерированную HTML таблицу.
Пробовал делать через preg_replace, но знания в PHP только на начальном уровне, а понимание регулярных выражений, которые необходимы для того, чтобы вытащить номер таблицы, минимальны.
Используйте preg_replace_callback. В него вы передаете паттерн и функцию, которая получает часть строки и возвращает то, на что надо заменить. Например:
$s = "asdasd#PRINT_TABLE_5#qweqwe";
$p = preg_replace_callback('/#PRINT_TABLE_(\d+)#/', function($matches) {
// $matches[0] будет содержать "PRINT_TABLE_5"
// $matches[1] будет содержать то, что попало в скобки паттерна: (\d+),
// т. е. строку "5"
$list_num = $matches[1] * 1;
return 2 * $list_num;
}, $s);
var_dump($p); // string(14) "asdasd10qweqwe"