php 5.3 eregi_replace to preg_replace

时间:2011-11-15 10:43:36

标签: php mysql sql

  

可能重复:
  Converting ereg expressions to preg

我正在尝试修复一些旧代码,以便它可以与PHP 5.3一起使用。 希望第一次转换为str_replace是可以的,但我完全不确定第二次转换为preg_replace。

非常感谢任何帮助。感谢

$this->Query = str_replace(" where "," WHERE ", $this->Query);
$this->Query = str_replace(" select "," SELECT ", $this->Query);
$this->Query = str_replace(" from "," FROM ", $this->Query);
$this->Query = str_replace(" as "," AS ", $this->Query);

// $this->Query = eregi_replace(" WHERE ", " where ", $this->Query);
// $this->Query = eregi_replace("SELECT ", "select ", $this->Query);
// $this->Query = eregi_replace(" FROM ", " from ", $this->Query);
// $this->Query = eregi_replace(" AS ", " as ", $this->Query);

$TempQuery = eregi_replace("^select .* from ", "select count(1) from ", $this->Query);
$TempQuery = eregi_replace(" order by .*$", "", $TempQuery);

2 个答案:

答案 0 :(得分:1)

* eregi_replace *必须替换为* preg_replace *

前:

$string = $this->Query;
$pattern = '/^select .* from /i';
$replacement = "select count(1) from ";
$TempQuery = preg_replace($pattern, $replacement, $string);

答案 1 :(得分:1)

如上所述,SQL语法不一定是大写的......但无论如何要回答你的问题:

$TempQuery = preg_replace("/^select .*? from /i", "select count(1) from ", $this->Query);
$TempQuery = preg_replace("/ order by .*?$/i", "", $TempQuery);

那应该有用。我使正则表达式不区分大小写,因为你似乎遇到了大写和小写的问题。另外,我通过添加一个问号来.* ungreedy以避免额外的复杂情况。