MySQL中的正则表达式错误(相同的正则表达式在PHP中工作)


Regex errors in MySQL (same regex works in PHP)

我正在开发一个搜索函数来获取用户输入并搜索 mysql 字段这个想法是拆分用户搜索的单词并在字段中查找每个术语有问题的。

用于构建我正在使用的正则表达式的代码是从工作的纯 PHP 脚本复制而来的(正则表达式似乎适用于 PHP,所以我怀疑这是正则表达式风格的不同)

如果这是一个明显的问题,请原谅我,仍然对正则表达式有所了解。

首先,我将向您展示我运行的查询和我收到的错误

"SELECT * from `images` WHERE ( `name` REGEXP '^(?=.*gallardo).*$' OR `meta` REGEXP '^(?=.*gallardo).*$' ) ORDER BY `changestamp` DESC

正则表达式中出现错误"重复运算符操作数无效"

SELECT * from `images` WHERE ( `name` REGEXP '^(?=.*gallardo)(?=.*lambo).*$' OR `meta` REGEXP '^(?=.*gallardo)(?=.*lambo).*$' ) ORDER BY `changestamp` DESC

给出相同的错误

为了编译这个正则表达式,我接受用户提交的输入,如"gallardo lambo"并运行此 PHP 过程

if(isset($_GET['keyword'])){
        $searchterms = explode(' ',$_GET['keyword']);
        $regstr = '^';
        foreach($searchterms as $i => $v)
        {
            if($v)
                $regstr .= '(?=.*'.preg_replace('/[-'[']'/'{'}'(')'*'+'?'.'''^'$'|]/', "''$&", $v).')'; 
        }
        $regstr .= '.*$';
    }

然后我把它放在查询中,比如

"( `name` REGEXP '$regstr' OR `meta` REGEXP '$regstr' )"

当我在 php 的 preg_match() 中使用此方法时,它似乎有效。

有什么见解吗?随意告诉我,我不知道我在做什么。

谢谢!

MySQL 正则表达式比 PHP 更受限制 - 它们不支持反向引用或前瞻。 请参阅手册。

您可能希望改为查看全文搜索。