我正在使用下载的PHP脚本来加速我网站的开发,但是我收到了一堆与ereg相关的“已弃用”消息。我要在上线之前关闭警告,但我想确保我先清除所有警告!
我找到了handy guide这对简单的位有用,例如用/和/ i更改preg_replace的eregi_replace但是我遇到了一些更高级的表达式的问题(带注释,连接,变量,大括号等等 - 有些是相同的类型,但是我在试图打破它时感到很困惑!)。
当我更新以下内容时,有人可以告诉我应该把/或/ / i放在哪里,或者,同样欢迎,告诉我每种类型的操作(或指示我的指示)所以我可以自己做?
eregi("<!--\ startBlock\(([^)]+)\)\ -->", $content["body"], $m)
eregi($reg, $content["body"], $m)
eregi("([^\.]+)\.(.*)", $variable, $m) ... I think (?) this is preg_replace("/([^\.]+)\.(.*)/i", $variable, $m)
eregi("{url:([^}]+)}", $txt, $m))
eregi_replace("{".$key."}", $val, $txt)
eregi_replace("{script}", $HTTP_SERVER_VARS["SCRIPT_NAME"], $txt)
eregi_replace("{ifNotSet:".$m[1].":([^}]+)}", "", $txt)
更新: 我似乎已经全部工作(感谢帮助),除了下面的一个函数,我无法弄清楚preg版本 - 我尝试了各种组合,但结果页面永远不会给出与eregi版本相同的结果(使用错误行)。有什么建议吗?
function parse(&$content) {
while (preg_match("/<!--\ startBlock\(([^)]+)\)\ -->/i", $content["body"], $m)) {
$name = $m[1];
$block = array();
$block["name"] = $name;
$block["blocks"] = array();
$block["used"] = 0;
$block["values"] = array();
$reg = "<!--\ startBlock\(".$name."\)\ -->(.*)<!--\ endBlock\(".$name."\)\ -->";
if (!eregi("$reg", $content["body"], $m)) {
$this->error("block `".$name."' does not have startBlock() AND endBlock().");
}
$block["body"] = $m[1];
$content["body"] = eregi_replace("$reg", "{".$name."}", $content["body"]);
$content["blocks"][$name] = array();
$this->parse(&$block);
$content["blocks"][$name][0] = $block;
}
}
然后我将开始使用“电话时间传递参考”,这看起来更加棘手!
答案 0 :(得分:0)
我假设/
你是指开始和结束模式的分隔符?可以把它们想象成双弦引号。它们需要位于模式的开头和结尾,并且模式中的任何/
都需要转义\/
,您可以将修饰符放在最后,例如i
,其中说明它将检查模式不区分大小写。所以/pattern/i
将检查模式(不区分大小写),并将说</a>
翻译为preg,它将类似于/<\/a>/
(如果需要,您可以添加i)。
你可以把反斜杠换成别的东西(比如说@标志或其他东西),但是现在,我只是用它们来保持简单。可能需要进行其他修改,但这似乎是最重要的修改。
答案 1 :(得分:0)
//只是边框字符,你实际上可以使用几乎任何你想要的字符,只要它们不会出现在正则表达式的其他地方。 / i表示不区分大小写,这意味着模式将数学大写或小写。
要记住的重要一点是,如果你把\放在一个角色前面它会逃脱它,而不是把它当作特殊角色。