我有一个 MySql搜索,可以正常运行和正则表达式。 但它只找到完整的单词。
例如,如果我在“apples
”匹配的文本中搜索i really love apples
。但是,如果我搜索apple
,我会无结果。
这是我到目前为止所得到的:
$search = (ini_get('magic_quotes_gpc')) ? stripslashes($_GET['q']) : $_GET['q'];
$search = mysql_real_escape_string($search);
$search = strtoupper(preg_replace('/\s+/', '|', trim($_GET['q'])));
$regexp = "REGEXP '[[:<:]]($search)[[:>:]]'";
$query = "SELECT * FROM `food` WHERE UPPER(`fruits`) $regexp";
我真的被困住了,非常感谢任何帮助!谢谢!
答案 0 :(得分:4)
如果您想在字段内容中的任意位置匹配字符串,则可以使用LIKE
运算符:
$query = "SELECT * FROM `food` WHERE UPPER(`fruits`) LIKE '%$search%'";
根据您的表格归类,strtoupper
和UPPER
语句可能是多余的(通常如果归类在其末尾有_ci
,则将以不区分大小写的方式执行比较)。
答案 1 :(得分:3)
是的,如果您使用字边界模式,它正是您所要求的:
$regexp = "REGEXP '[[:<:]]($search)[[:>:]]'";
这意味着,如果您搜索apple
,只有e
是单词的结尾才会匹配。这就是[[:>:]]
模式的含义。
您可以稍微扩展模式,在单词bounary之前包含额外的字母字符:
$regexp = "REGEXP '[[:<:]]($search)[[:alpha:]]*[[:>:]]'";
这样就可以匹配apples
,还可以匹配applesauce
。