0

我正在使用一个使用

$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 应该很容易......

4

1 回答 1

1

preg_matchor preg_replaceor 您的正则表达式没有问题。

$query完全不匹配时会出现此错误(例如$query="SELECT foo FROM bar")。Then$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.
}
于 2012-01-13T04:52:32.483 回答