@alexgugr
HTML/CSS/JS, C++, Python и т.д.

Как найти «маркер» в строке и заменить его на другую строку?

Доброго дня!

Есть необходимость реализовать на сайте вывод листа из книги Excel в виде html таблицы.

Например, пользователь пишет описание раздела в текстовой форме, и в каком-то месте описания ему необходимо вывести таблицу, для этого он вставляет маркер вида: #PRINT_TABLE_!LIST_NUM!>#, где !LIST_NUM! номер листа в Excel, который он хочет вывести, получается к примеру #PRINT_TABLE_5#.

Соответственно, нужен алгоритм, который перед выдачей описания раздела во фронтенд, будет проверять текст на наличие подобных "маркеров", и заменять их на html таблицы.

Собственно вопрос, каким образом найти в тексте "маркер" #PRINT_TABLE_5#, вытащить из него номер таблицы, и подставить на его место уже сгенерированную HTML таблицу.

Пробовал делать через preg_replace, но знания в PHP только на начальном уровне, а понимание регулярных выражений, которые необходимы для того, чтобы вытащить номер таблицы, минимальны.

Буду рад любой помощи.
Спасибо!
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Sayonji
Используйте 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"
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы