簡體   English   中英

MySQL搜索正則表達式的一部分

[英]MySQL search for part of regex

我有一個MySql搜索 ,可以正常使用regexp 但它只找到完整的單詞。

例如,如果我在文本中搜索applesi 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";

我真的被卡住了,非常感謝任何幫助! 謝謝!

如果要在字段內容中的任何位置匹配字符串,可以使用LIKE運算符:

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

根據您的表排序規則, strtoupperUPPER語句可能是多余的(通常如果排序_ci在其末尾有_ci ,則將以不區分大小寫的方式執行比較)。

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

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

這意味着如果你搜索apple ,它只匹配,如果e是單詞的結尾。 這就是[[:>:]]模式的含義。

您可以稍微擴展模式,在單詞bounary之前包含額外的alpha字符:

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

那將允許它匹配apples ,例如applesauce

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM