MySQL搜索正则表达式的一部分

时间:2011-11-18 18:17:40

标签: php mysql regex

我有一个 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";

我真的被困住了,非常感谢任何帮助!谢谢!

2 个答案:

答案 0 :(得分:4)

如果您想在字段内容中的任意位置匹配字符串,则可以使用LIKE运算符:

$query = "SELECT * FROM `food` WHERE UPPER(`fruits`) LIKE '%$search%'";

根据您的表格归类,strtoupperUPPER语句可能是多余的(通常如果归类在其末尾有_ci,则将以不区分大小写的方式执行比较)。

答案 1 :(得分:3)

是的,如果您使用字边界模式,它正是您所要求的:

$regexp = "REGEXP '[[:<:]]($search)[[:>:]]'";

这意味着,如果您搜索apple,只有e是单词的结尾才会匹配。这就是[[:>:]]模式的含义。

您可以稍微扩展模式,在单词bounary之前包含额外的字母字符:

$regexp = "REGEXP '[[:<:]]($search)[[:alpha:]]*[[:>:]]'";

这样就可以匹配apples,还可以匹配applesauce