2012-01-13 43 views
0

我使用它使用eregi到的preg_match

$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); 
      } 

一个lib我更改代码的某些部分,以

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

但现在我得到错误信息,说“未定义抵消:2”和“未定义偏移:1"

我觉得从eregi到的preg_match应该是很容易感动......

回答

1

没有IS起诉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. 
} 
+0

谢谢,队友!愚蠢的错误..嘿嘿.. – Iyas 2012-01-13 08:54:11

相关问题