Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的正则表达式错误(相同的正则表达式在PHP中工作)_Php_Mysql_Regex - Fatal编程技术网

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

MySQL中的正则表达式错误(相同的正则表达式在PHP中工作),php,mysql,regex,Php,Mysql,Regex,我正在开发一个搜索功能,以获取用户输入并搜索mysql字段 这样做的目的是将用户搜索的单词分开,并在字段中查找每个词 有问题 我正在使用的用于构建regex的代码是从一个正常工作的纯PHP脚本复制而来的(regex似乎可以与PHP配合使用,因此我怀疑这与regex的风格不同) 如果这是一个明显的问题,请原谅我,我仍然对regex有感觉 首先,我将向您展示我运行的查询和得到的错误 "SELECT * from `images` WHERE ( `name` REGEXP '^(?=.*gallar

我正在开发一个搜索功能,以获取用户输入并搜索mysql字段 这样做的目的是将用户搜索的单词分开,并在字段中查找每个词 有问题

我正在使用的用于构建regex的代码是从一个正常工作的纯PHP脚本复制而来的(regex似乎可以与PHP配合使用,因此我怀疑这与regex的风格不同)

如果这是一个明显的问题,请原谅我,我仍然对regex有感觉

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

"SELECT * from `images` WHERE ( `name` REGEXP '^(?=.*gallardo).*$' OR `meta` REGEXP '^(?=.*gallardo).*$' ) ORDER BY `changestamp` DESC
从regexp中获取错误“重复运算符操作数无效”

给出了相同的错误

为了编译这个正则表达式,我接受用户提交的输入,比如“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更加有限-它们不支持反向引用或前瞻。请参阅


您可能需要进行研究。

我的直觉告诉我,在sql查询中使用正则表达式进行搜索可能会很慢www
(?=
是PCRE语法;MySQL使用Henry Spencer对v8正则表达式的重新实现。有关可能的解决方法,请参阅
"( `name` REGEXP '$regstr' OR `meta` REGEXP '$regstr' )"