MySQL中的正则表达式错误(同样的正则表达式在PHP中有效)

Dou*_*oug 2 php regex mysql

我正在开发一个搜索功能来获取用户输入并搜索一个mysql字段.这个想法是分割用户搜索的单词并查找相关字段中的每个术语.

用于构建我正在使用的正则表达式的代码是从一个工作的纯PHP脚本复制的(正则表达式似乎与PHP一起使用,所以我怀疑它是正则表达式的区别)

请原谅我,如果这是一个明显的问题,仍然感觉到正则表达式.

首先,我将向您展示我运行的查询以及我得到的错误

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

从regexp获得错误'重复 - 运算符操作数无效'

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

给出了同样的错误

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

if(isset($_GET['keyword'])){

        $searchterms = explode(' ',$_GET['keyword']);

        $regstr = '^';

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

        $regstr .= '.*$';

    }
Run Code Online (Sandbox Code Playgroud)

然后我把它放在查询中

"( `name` REGEXP '$regstr' OR `meta` REGEXP '$regstr' )"
Run Code Online (Sandbox Code Playgroud)

当我使用这个方法与PHP的时候preg_match(),它似乎工作.

任何见解?随意告诉我,我不知道我在做什么.

谢谢!

egg*_*yal 5

MySQL正则表达式比PHP更有限 - 它们不支持后引用或前瞻.请参阅手册.

您可能希望查看全文搜索.