2017-03-07 173 views
2

說我有搜索字符串「男士健康」和我的數據庫我有值「男性健康」領域,如何將我的搜索字符串匹配針對這也許使用正則表達式?請記住,這只是一個例子,在我的數據庫中有很多記錄也包含任何數量的非字母字符,如「/,$,', - ,(,),1,2 ...」?搜索字符串是從URL獲取的,不應該包含任何編碼以便於閱讀。如何在Mysql字段中搜索字符串以填充字段中的任何特殊字符?

+0

爲什麼不直接使用'='的完美匹配? –

+1

MySQL中沒有「正則表達式替換」。我通過編寫一個MySQL函數來輸出字符串的淨化版本來解決這個問題。該函數逐字符地逐個遍歷源字符串並生成結果。 –

+0

到@JoshGreifer的解決方案類似,我已經存儲領域的消毒副本在數據庫中,但我的是一些BBML的語法和引用大量雜亂。因爲我知道每次有人搜索時都會遇到問題,所以我沿着這條路線前進。這是一個SQL Server數據庫,但這是無關緊要的。 –

回答

0

我結束了創建一個小功能,其產生我和我的MySQL查詢的RLIKE應該不管字母之間的任何特殊字符的字母數字字符序列匹配使用正則表達式的字符串。

function GenerateCategoryRegex($SrchTerm) { 
    $arrChar = str_split(str_replace(' ', '', $SrchTerm)); 
    $RegEx = '(^|;)+[[:space:]]*'; 
    foreach($arrChar as $Char) { 
     $RegEx .= $Char . '{1}[^\w,]*'; 
    } 
    $RegEx .= '[[:space:]]*(;|$)+'; 

    return $RegEx; 
} 
0

添加另一列,其中包含「可搜索文本」,如「mens health」。然後搜索列,但顯示列(「平均健康」)。

現在,你可以自由地做其他調整 - 比如添加同義詞,常見的拼寫錯誤等的搜索欄。

而且你REGEXP可以成爲一個簡單的LIKE,或可能甚至快速FULLTEXT

相關問題