Задать вопрос
@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 только на начальном уровне, а понимание регулярных выражений, которые необходимы для того, чтобы вытащить номер таблицы, минимальны.

Буду рад любой помощи.
Спасибо!
  • Вопрос задан
  • 168 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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"
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽