2011-11-15 3 views
-1

가능한 복제를 preg_replace이다합니다 :
Converting ereg expressions to pregPHP 5.3 eregi_replace는

나는 그것이 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); 
+7

SQL은 대문자 여야한다는 것을 알고 있습니까? (그리고 당신은 eregi_replace가했던 것과 정반대의 행동을했다.) – yoavmatchulsky

+0

PCRE 구문은 http://php.net/manual/en/reference.pcre.pattern.syntax.php – BoltClock

+0

에서 참조 할 수있다.'preg_replace ('/ pattern_here/i', 'replacement', $ subject)',하지만이 모든 번거 로움을 해결하는 이유는 무엇입니까? 쿼리는 어느 쪽이든 작동합니다. – Shef

답변

1

, SQL 구문은 대문자에있을 필요가 없습니다 ... 그러나 그래도 질문에 대답하려면 :

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

그래야합니다. 나는 당신이 대문자와 소문자에 문제가있는 것처럼 보이기 때문에 정규 표현식을 대소 문자를 구분하지 않도록했다. 또한 나는 여분의 합병증을 피하기 위해 물음표를 추가하여 .*을 만들었습니다.

1

* eregi_replace의 *는 * preg_replace이다 *로 대체해야합니다

예 :

이 같이 말했다
$string = $this->Query; 
$pattern = '/^select .* from /i'; 
$replacement = "select count(1) from "; 
$TempQuery = preg_replace($pattern, $replacement, $string); 
+0

많은 감사의 말로는 구분 기호와 'i'를 추가하는 것만으로도 충분하다. 건배 – TSUK