formtools.org preg_replace / e

时间:2014-07-23 22:06:31

标签: php regex preg-replace

我需要在多个域上安装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 个答案:

答案 0 :(得分:0)

如果该服务不支持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,所以这只是从头开始翻译。如果您有任何错误,请评论(而不是downvoting),我可以努力解决它们:)