Php formtools.org preg_replace/e

Php formtools.org preg_replace/e,php,regex,preg-replace,Php,Regex,Preg Replace,我需要在多个域上安装formtools.org,但由于它使用了preg\u replace(),我的托管公司不允许这样做。我搜索了他们的论坛,但运气不好(我无法访问提问) 我相信,如果可以使用preg\u replace\u callback()重写以下内容,这将解决我所有的问题 $source_content = preg_replace($search.'e', "'" . $this->_quote_replace($this->left_delimiter) . 'p

我需要在多个域上安装
formtools.org
,但由于它使用了
preg\u replace()
,我的托管公司不允许这样做。我搜索了他们的论坛,但运气不好(我无法访问提问)

我相信,如果可以使用
preg\u replace\u 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);

任何帮助都将不胜感激

如果该服务不支持
preg\u replace()
,那么如果它支持
preg\u replace\u callback()
,我会感到惊讶(因为它们基本上是相同的)。但是,如果问题是由于不推荐使用的
e
修饰符引起的,
preg\u replace\u 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\u内容
的情况下,我没有最简单的方法来测试这一点,因此这只是从零开始翻译的。如果您有任何错误,请发表评论(而不是否决),我可以解决它们:)

感谢您尝试与我一起解决此问题!我希望我能提供更多的帮助,但这对我来说有点先进。我确实在错误日志中看到了这一点:mod_fcgid:stderr:PHP致命错误:在/var/www/vhosts/xxx.xxx.xxx/httpdocs/forms/global/smarty/smarty_Compiler.class.PHP第278行的对象上下文中使用$this,推荐人:哦,我认为preg\u replace对我的服务很好,这是他们不允许的/e选项。@ScottRiggle什么是
$this->\u quote\u replace($this->xxx\u delimiter)
,反正我们可以避免这个?对不起,我不知道这是什么,我没有写它。它来自Smarty_Compiler.class.php这似乎奏效了。我怎样才能感谢你对我的帮助@山姆