簡體   English   中英

eregi至preg_match

[英]eregi to preg_match

我正在使用一個lib

$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應該很容易...

preg_matchpreg_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.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM