formtools.org preg_replace /e

Мне нужно установить formtools.org на нескольких доменах, но из-за его использования preg_replace()моя хостинговая компания не допустит этого. Я искал их форумы не случайно (я не могу получить доступ, чтобы задать вопрос)

Я полагаю, если следующее может быть переписано с помощью preg_replace_callback() это решило бы все мои проблемы.

    $source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);

Любая помощь будет принята с благодарностью!

1 ответ

Решение

Если служба не поддерживает preg_replace() Я был бы удивлен, если это поддерживает preg_replace_callback() (поскольку они по сути одинаковы). Однако, если проблема связана с устаревшим e модификатор, preg_replace_callback() поможет.

С помощью preg_replace_callback() очень просто, второй параметр - это вызываемая функция для создания заменяющего текста. Эта функция принимает один параметр, который является массивом групп этого совпадения. Так reset($matches) в моем ответе похоже на \\0 в вашем примере. Попробуй это:

$source_content = preg_replace_callback(
  $search,
  function($matches) {
    $match = reset($matches);
    $count = substr_count($match, "\n");

    $string = "'" . $this->_quote_replace($this->left_delimiter) . "php'";
    $string .= str_repeat("\n", $count);
    $string .= "'" . $this->_quote_replace($this->right_delimiter) . "'";

    return $string;
  },
  $source_content
);

Примечание: поскольку у меня нет самого простого способа проверить это без составления ваших функций, выражений и $source_content Это просто переводится с нуля. Если у вас есть какие-либо ошибки, пожалуйста, прокомментируйте (вместо понижения), и я смогу их исправить:)

Другие вопросы по тегам