我需要在多个域上安装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);
非常感谢任何帮助!
答案 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),我可以努力解决它们:)