我正在开发一个搜索功能来获取用户输入并搜索 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's 一起使用时preg_match()
,它似乎有效。
有什么见解吗?随意告诉我,我不知道自己在做什么。
谢谢!