ereg要预先解决问题

时间:2011-06-27 01:45:34

标签: php regex preg-replace ereg

我正在使用下载的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;
}
}

然后我将开始使用“电话时间传递参考”,这看起来更加棘手!

2 个答案:

答案 0 :(得分:0)

我假设/你是指开始和结束模式的分隔符?可以把它们想象成双弦引号。它们需要位于模式的开头和结尾,并且模式中的任何/都需要转义\/,您可以将修饰符放在最后,例如i,其中说明它将检查模式不区分大小写。所以/pattern/i将检查模式(不区分大小写),并将说</a>翻译为preg,它将类似于/<\/a>/(如果需要,您可以添加i)。

你可以把反斜杠换成别的东西(比如说@标志或其他东西),但是现在,我只是用它们来保持简单。可能需要进行其他修改,但这似乎是最重要的修改。

答案 1 :(得分:0)

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

要记住的重要一点是,如果你把\放在一个角色前面它会逃脱它,而不是把它当作特殊角色。