首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >eregi to preg_match

eregi to preg_match
EN

Stack Overflow用户
提问于 2012-01-13 12:39:34
回答 1查看 216关注 0票数 0

我使用的是lib,它使用

代码语言:javascript
复制
$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);
            }

我将代码的一部分更改为

代码语言:javascript
复制
$pattern = "/LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})/i";
        $replacement = "";
        preg_match($pattern, $query, $regs);

但是现在我收到的错误消息是“未定义的偏移: 2”和“未定义的偏移: 1”。

我认为从eregi迁移到preg_match应该很容易。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 12:52:32

preg_matchpreg_replace或您的正则表达式都没有问题。

$query根本不匹配(例如$query="SELECT foo FROM bar")时,你会得到这个错误。那么$regs是一个空数组,所以访问$regs[2]会导致错误,因为它一开始就没有元素。

我建议使用count($regs)来看看是否要做$regs[2]这件事。

代码语言:javascript
复制
$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.
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8845999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档