preg_replace php замена по очереди

168
03 апреля 2019, 22:00

Исходный код:

[display = "home"]
    html code
[/display]
[display = "category"]
    html code
[/display]
[display = "home"]
    html code
[/display]

Подскажите, как написать регулярное выражение, что бы шорт-код например [display = "home"]...[/display] заменялся на пустоту. Главное, что бы он заменялся по очереди. То есть регулярное выражение должно находить начало [display = "..."]... и первый найденный [/display], а не последний. Старался описать понятно.

Делаю так в цикле, но результат плох:

$pattern = str_replace(["\"", "[", "]", " ", "/"], ["\\\"", "\[", "\]", "\s+", "\/"], $display[1][$key]);
$pattern2 = str_replace(["\"", "[", "]", " ", "/"], ["\\\"", "\[", "\]", "\s+", "\/"], $display[4][$key]);
$result = preg_replace('/'.$pattern.'(.+?)'.$pattern2.'/is', "", $result);

Где в $pattern попадает \[display = \"home\"\], а в $pattern2 попадает \[\/display\] но в итоге результат не тот, который ожидается.

Answer 1

Вот вам регулярка для шаблонизатора:

/\[display = "(.+)"\]([^[]+)\[\/display\]/U

Если использовать preg_replace_callback можно на лету менять содержимое или вовсе убирать блоки.
Пример работы регулярки: https://regex101.com/r/WlkqLp/1/

$regExp = '/\[display = "(.+)"\]([^[]+)\[\/display\]/U';
preg_replace_callback($regExp,function ($matches)
  {
    if($matches[1]=='home') return '';
    if($matches[1]=='category') return $matches[2];
  },$value);
READ ALSO
Реализация функции «кто онлайн в чате» приводит к зависанию сервера

Реализация функции «кто онлайн в чате» приводит к зависанию сервера

Простейшая реализация чата со списком юзеров онлайнОдин SSE (стрим) выдаёт появившиеся новые строки в txt-файле, а другой скрипт с SSE отвечает...

130
PHP RAR ARCHIVE добавление файла

PHP RAR ARCHIVE добавление файла

Нужно провести манипуляции с архивами, то есть добавить в них файлыС zip понятно - стандартная встроенная библиотека в php уже протестированна

150
Почему не работает Blockchain?

Почему не работает Blockchain?

Доброго времени суток!

177
Drupal 8 в Firefox Код ошибки: SEC_ERROR_UNKNOWN_ISSUER

Drupal 8 в Firefox Код ошибки: SEC_ERROR_UNKNOWN_ISSUER

Знакомство с Drupal началось с проблемУстановлен Openserver 5

162