eregi to preg_match - PullRequest
       32

eregi to preg_match

0 голосов
/ 13 января 2012

Я использую библиотеку, которая использует

$pattern = "LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})";
        $replacement = "";
        eregi($pattern, $query, $regs);
        $query = eregi_replace($pattern, $replacement, $query);

        if($regs[2])
            $query = str_ireplace("SELECT ", "SELECT TOP ".$regs[3]." ", $query);
        else
            {
            if($regs[1])
                $query  = str_ireplace("SELECT ", "SELECT TOP ".$regs[1]." ", $query);
            }

Я изменяю некоторую часть кода на

$pattern = "/LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})/i";
        $replacement = "";
        preg_match($pattern, $query, $regs);

Но теперь я получаю сообщения об ошибках "Неопределенное смещение: 2" и«Неопределенное смещение: 1»

Я думаю, что переход от eregi к preg_match должен быть легким ...

1 Ответ

1 голос
/ 13 января 2012

Нет проблем с preg_match или preg_replace или вашим регулярным выражением.

Вы получаете эту ошибку, когда $query не совпадает вообще (например, $query="SELECT foo FROM bar").Тогда $regs является пустым массивом, поэтому доступ к $regs[2] приводит к ошибке, поскольку в нем нет элементов для начала.

Я бы предложил использовать count($regs), чтобы увидеть, нужно ли вообще делать$regs[2] вещь.

$query="SELECT asdf FROM foo";
$pattern = "/LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})/i";
$replacement = ""; 
preg_match($pattern, $query, $regs);
$query = preg_replace($pattern, $replacement, $query);


if( count($regs)>=0 ) {
    if($regs[2])
    // ... etc the #$egs[2] $regs[1] code here.
}
...