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