1

我正在使用下载的 PHP 脚本来加速我的网站的开发,但我收到了一堆与 ereg 相关的“已弃用”消息。我将在上线之前关闭警告,但我会努力确保我首先清除它们!

我找到了一个方便的指南,它适用于简单的部分,例如使用 / 和 /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;
}
}

然后我将开始讨论“呼叫时传递参考”,这似乎更棘手!

4

2 回答 2

0

我假设/你的意思是分隔符开始和结束模式?把它们想象成字符串周围的双引号。它们需要位于模式的开头和结尾,并且模式中/的任何内容都需要转义\/,您可以将修饰符放在末尾,例如i,这表明它将检查模式不区分大小写。所以/pattern/i将检查模式(不区分大小写),并将say翻译</a>成preg,它会类似于/<\/a>/(如果你愿意,你可以在之后添加i)。

你可以把反斜杠改成别的东西(比如@符号或其他东西),但现在,我只想用它们来保持简单。可能还需要其他修改,但这似乎是最大的修改。

于 2011-06-27T02:14:32.553 回答
0

// 只是边框字符,您实际上可以使用几乎任何您想要的字符,只要它们不会出现在正则表达式的其他地方。/i 表示不区分大小写,这意味着模式将计算大写或小写。

要记住的重要一点是,如果您将 \ 放在字符前面,它将转义它,而不是将其视为特殊字符。

于 2011-06-27T02:17:24.800 回答